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 enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs