Re: [XFree86] XShmSegmentInfo issues
On Thu, 4 Dec 2003, Callum Prentice wrote: 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 ? 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. Mark. ___ XFree86 mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/xfree86
Re: [XFree86] XShmSegmentInfo issues
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
Re: [XFree86] XShmSegmentInfo issues
On Thu, 4 Dec 2003, Callum Prentice wrote: 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. 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. 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. 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. Mark. ___ XFree86 mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/xfree86
Re: [XFree86] XShmSegmentInfo issues
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