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

Reply via email to