Enlightenment CVS committal
Author : kwo
Project : e16
Module : e
Dir : e16/e/src
Modified Files:
piximg.c
Log Message:
Fix bugs when shared memory image creation fails causing memory leak and
X-errors.
===================================================================
RCS file: /cvs/e/e16/e/src/piximg.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- piximg.c 13 Feb 2008 21:31:29 -0000 1.4
+++ piximg.c 1 Mar 2008 15:45:46 -0000 1.5
@@ -75,23 +75,29 @@
{
pi->shminfo->shmaddr = pi->xim->data =
(char *)shmat(pi->shminfo->shmid, 0, 0);
- if (pi->shminfo->shmaddr)
+ if (pi->shminfo->shmaddr != (void *)-1)
{
pi->shminfo->readOnly = False;
+ Mode.events.last_error_code = 0;
XShmAttach(disp, pi->shminfo);
- pi->pmap =
- XShmCreatePixmap(disp, win, pi->shminfo->shmaddr,
- pi->shminfo, w, h, VRoot.depth);
- if (pi->pmap)
+ ESync(0);
+ if (Mode.events.last_error_code == 0)
{
- gcv.subwindow_mode = IncludeInferiors;
- pi->gc = EXCreateGC(win, GCSubwindowMode, &gcv);
- if (pi->gc)
- return pi;
+ pi->pmap =
+ XShmCreatePixmap(disp, win, pi->shminfo->shmaddr,
+ pi->shminfo, w, h, VRoot.depth);
+ if (pi->pmap)
+ {
+ gcv.subwindow_mode = IncludeInferiors;
+ pi->gc =
+ EXCreateGC(win, GCSubwindowMode, &gcv);
+ if (pi->gc)
+ return pi;
- EFreePixmap(pi->pmap);
+ EFreePixmap(pi->pmap);
+ }
+ XShmDetach(disp, pi->shminfo);
}
- XShmDetach(disp, pi->shminfo);
shmdt(pi->shminfo->shmaddr);
}
shmctl(pi->shminfo->shmid, IPC_RMID, 0);
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs