[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


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] 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] 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