Re: [XFree86] XShmSegmentInfo issues

2003-12-05 Thread Callum Prentice
that's the conclusion i came to late last night too.

now, for each of my XImage helper class instances, i declare a XShmSegmentInfo* in the 
ctor
and point it to a new'd buffer so it hangs until the class dtor gets rid of it as my 
app is
ending.

seems to work okay for now.

 Looking through the code, it looks like Xlib stores a pointer
 to the shminfo.  I didn't realize it did that.  That would imply
 that each XImage needs a XShmSegmentInfo that sticks around for the
 life of the XImage.
 
 It impresses me that it is a mistake that it did this rather
 than copying the contents of the XShmSegmentInfo.  I'm not sure
 why it was implemented that way.   I don't think we have any
 XShm man pages.  If we did, hopefully, they would mention something
 like that.
 
 The error must be that the first XImage ends up with the second 
 XImage's data and subsequently the operation appears to be addressing
 outside of the shared memory segment, so the BadValue error happens.
___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86


[XFree86] XShmSegmentInfo issues

2003-12-04 Thread Callum Prentice
i have a methods in a class to create a shared memory x image - it creates and stores 
an
xImage in the usual way:

XShmSegmentInfo shminfo;
ximage = XShmCreateImage(..., shminfo);
shminfo.shmid = shmget (.., ximage-height * ximage-bytes_per_line, ...);
shminfo.shmaddr = ximage-data = shmat(shminfo.shmid, 0, 0);
shminfo.readOnly = False;
XShmAttach (display, shminfo);

i call this method in several places and only call XShmPutImage on the xImage later in 
my
code.

i get an X error: 

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  144 (MIT-SHM)
  Minor opcode of failed request:  3 (X_ShmPutImage)

which appears to be because the shared segment info has changed.

if i save the shminfo each time and then re-attach it to the display before i call
XShmPutImage, i still get the problem.

any ideas ?  what is the right thing to do here.

also - in the code i'm using there is a call to:

shmctl ( shmInfo.shmid, IPC_RMID, NULL ); 

just after it's created - surely this is wrong and i shouldn't remeove the sgm segment 
until
my program is finishing.

thanks in advance as always.


___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86


Re: [XFree86] XShmSegmentInfo issues

2003-12-04 Thread Callum Prentice
I think you've misinterpreted this.  Aside from corruption of
 the ximage data structure, the only time BadValue is returned
 is if your source rectangle passed to XShmPutImage lies outside
 of the XImage (or if you pass junk for the send_event).  Check
 your dimensions passed to XShmPutImage.

that's odd then - if a rearrange my code so i call create 1 then write 1 then create 2 
then
write 2 it works perfectly.

if i call create 1 create 2 write 1 write 2 it fails with the X error i mentioned.

(where 'create' does all the shm stuff and creation of the ximage and 'write' does the
'XShmPutImage'

so i don't need to save/restone any of the XShmSegmentInfo then ?


Segments don't disappear until after they are removed and the last
 process attaching to them has detached.  Even if you remove it, it
 will not go away until after you detach.  When your program quits
 or crashes, it detaches automatically.  However, it does not get
 removed automatically, so if the app quits or crashes before removing
 the segment, the segment will get leaked.  That's why it's common
 practice to attach and then remove a segment.

thanks for that clarification - excellent.
___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86


Re: [XFree86] BadAccess errors using XShmPutImage

2003-11-04 Thread Callum Prentice
Many thanks Mark - that was exactly the problem - works perfectly now.

It's likely that you're not handling the padding correctly.
 Is (ximage-bytes_per_line == windowWidth * windowDepthBytes) ?
 
In general, I like to create the XImage first and then allocate
 the data later.  That saves you from having to do the work of
 finding out what the padding is supposed to be.  That is, pass
 NULL for the data field in XShmCreateImage.  Then shmget with
 (ximage-height * ximage-bytes_per_line), then fill in
 ximage-data with the value returned by shmat.  Eg:
 
 ximage = XShmCreateImage(..., shminfo);
 shminfo.shmid = shmget (.., ximage-height * ximage-bytes_per_line, ...);
 shminfo.shmaddr = ximage-data = shmat(shminfo.shmid, 0, 0);
 shminfo.readOnly = False;
 XShmAttach (display, shminfo);
 
So the pitch you should use is ximage-bytes_per_line.  You
 can get that independently by looking up pixmap formats, but it's
 easier to just have XShmCreateImage fill it in for you.
 
   Mark.
 
 
 
 On Mon, 3 Nov 2003, Callum Prentice wrote:
 
 1) Does your X-server have SHM support?  MIT-SHM should show up in 
the list of extensions reported by xdpyinfo.
  
  Yep - that extension is listed when i run xdpyinfo.
  
 2) Does your operating system have SHM support?  This sort of thing
is often disabled for security reasons.
  
  i'm not sure how to test this - i'm very much a x/unix novice - but after adding 
  printf's
 to
  another library i've been looking at (SDL), it seems that it is - SDL is certainly 
  calling
  XShmPutImage () successfully.
  
 3) Programming errors on your part?  BadAccess is generated if:
  
  Very likely.
  
  a) the server doesn't know about the segment (you called 
 XShmAttach on it didn't you?).
  
  Yep - I do that.
  
  b) The size is bad, that is, the segment is too small to
 contain the source you specified (or the XImage is
 improperly initialized).
  
  I suspect that it is some kind of unitialized structure problem.
  
  I chopped the return value tests and the error handler out of my code for clarity 
  and
 tacked
  it on the end of this message - might be something obvious.
  
  Thanks.
  
  cp
  
  
   snip 
  shmInfo.shmid = shmget ( IPC_PRIVATE, windowWidth * windowDepthBytes * 
  windowHeight,
 IPC_CREAT
  | 0777 );
  shmInfo.shmaddr = (char *)shmat ( shmInfo.shmid, 0, 0);
  shminfo.readOnly = False;
  
  XShmAttach ( display, shmInfo );
  
  XSync ( display, True );
  
  shmctl ( shmInfo.shmid, IPC_RMID, NULL );
  
  pixels = shmInfo.shmaddr;
  
  ximage = XShmCreateImage ( display, DefaultVisual ( display, screen ), windowDepth,
 ZPixmap,
  shmInfo.shmaddr, shmInfo, windowWidth, windowHeight );
  
  XShmPutImage ( display, window, DefaultGC ( display, screen ), ximage, 0, 0, 0, 0,
  windowWidth, windowHeight, False );
  
  --
  
  
  
  
  
i'm attempting to put together a simple test that creates a window, allocates 
a buffer
 in
memory and using an XImage and XShmPutImage () displays it on my screen.

i have a tiny piece of code that (as far as i know) does all the right things 
- it
 creates
   the
window but when i try to display the contents of my buffer via an XImage i get 
a
 message
   like
this:

X Error of failed request:  BadAccess (attempt to access private resource 
denied)
  Major opcode of failed request:  144 (MIT-SHM)
  Minor opcode of failed request:  3 (X_ShmPutImage)

i've seen this type of problem described in the newsgroups but there don't 
seem to be
 any
answers posted.

i check the return from all my previous calls and they're fine.

i'm using XFree86 version 4.3.0 (27 feb 2003), X Protocol version 11, rev 0, 
rel 6.6
 and
   my OS
is NetBSD/i386 1.6 [elf].
  
 

___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86


[XFree86] BadAccess errors using XShmPutImage

2003-11-03 Thread Callum Prentice
i'm attempting to put together a simple test that creates a window, allocates a buffer 
in
memory and using an XImage and XShmPutImage () displays it on my screen.

i have a tiny piece of code that (as far as i know) does all the right things - it 
creates the
window but when i try to display the contents of my buffer via an XImage i get a 
message like
this:

X Error of failed request:  BadAccess (attempt to access private resource denied)
  Major opcode of failed request:  144 (MIT-SHM)
  Minor opcode of failed request:  3 (X_ShmPutImage)

i've seen this type of problem described in the newsgroups but there don't seem to be 
any
answers posted.

i check the return from all my previous calls and they're fine.

i'm using XFree86 version 4.3.0 (27 feb 2003), X Protocol version 11, rev 0, rel 6.6 
and my OS
is NetBSD/i386 1.6 [elf].

can anyone shed any light on this please?

thanks.

cp
___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86


[XFree86] BadAccess errors using XShmPutImage

2003-11-03 Thread Callum Prentice
i'm attempting to put together a simple test that creates a window, allocates a buffer 
in
memory and using an XImage and XShmPutImage () displays it on my screen.

i have a tiny piece of code that (as far as i know) does all the right things - it 
creates the
window but when i try to display the contents of my buffer via an XImage i get a 
message like
this:

X Error of failed request:  BadAccess (attempt to access private resource denied)
  Major opcode of failed request:  144 (MIT-SHM)
  Minor opcode of failed request:  3 (X_ShmPutImage)

i've seen this type of problem described in the newsgroups but there don't seem to be 
any
answers posted.

i check the return from all my previous calls and they're fine.

i'm using XFree86 version 4.3.0 (27 feb 2003), X Protocol version 11, rev 0, rel 6.6 
and my OS
is NetBSD/i386 1.6 [elf].

can anyone shed any light on this please?

thanks.

cp
___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86


Re: [XFree86] BadAccess errors using XShmPutImage

2003-11-03 Thread Callum Prentice
   1) Does your X-server have SHM support?  MIT-SHM should show up in 
  the list of extensions reported by xdpyinfo.

Yep - that extension is listed when i run xdpyinfo.

   2) Does your operating system have SHM support?  This sort of thing
  is often disabled for security reasons.

i'm not sure how to test this - i'm very much a x/unix novice - but after adding 
printf's to
another library i've been looking at (SDL), it seems that it is - SDL is certainly 
calling
XShmPutImage () successfully.

   3) Programming errors on your part?  BadAccess is generated if:

Very likely.

a) the server doesn't know about the segment (you called 
   XShmAttach on it didn't you?).

Yep - I do that.

b) The size is bad, that is, the segment is too small to
   contain the source you specified (or the XImage is
   improperly initialized).

I suspect that it is some kind of unitialized structure problem.

I chopped the return value tests and the error handler out of my code for clarity and 
tacked
it on the end of this message - might be something obvious.

Thanks.

cp


 snip 
shmInfo.shmid = shmget ( IPC_PRIVATE, windowWidth * windowDepthBytes * windowHeight, 
IPC_CREAT
| 0777 );
shmInfo.shmaddr = (char *)shmat ( shmInfo.shmid, 0, 0);
shminfo.readOnly = False;

XShmAttach ( display, shmInfo );

XSync ( display, True );

shmctl ( shmInfo.shmid, IPC_RMID, NULL );

pixels = shmInfo.shmaddr;

ximage = XShmCreateImage ( display, DefaultVisual ( display, screen ), windowDepth, 
ZPixmap,
shmInfo.shmaddr, shmInfo, windowWidth, windowHeight );

XShmPutImage ( display, window, DefaultGC ( display, screen ), ximage, 0, 0, 0, 0,
windowWidth, windowHeight, False );

--





  i'm attempting to put together a simple test that creates a window, allocates a 
  buffer in
  memory and using an XImage and XShmPutImage () displays it on my screen.
  
  i have a tiny piece of code that (as far as i know) does all the right things - it 
  creates
 the
  window but when i try to display the contents of my buffer via an XImage i get a 
  message
 like
  this:
  
  X Error of failed request:  BadAccess (attempt to access private resource denied)
Major opcode of failed request:  144 (MIT-SHM)
Minor opcode of failed request:  3 (X_ShmPutImage)
  
  i've seen this type of problem described in the newsgroups but there don't seem to 
  be any
  answers posted.
  
  i check the return from all my previous calls and they're fine.
  
  i'm using XFree86 version 4.3.0 (27 feb 2003), X Protocol version 11, rev 0, rel 
  6.6 and
 my OS
  is NetBSD/i386 1.6 [elf].
___
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86