forked from e16/e16
1
0
Fork 0

Fix bugs when shared memory image creation fails causing memory leak and X-errors.

SVN revision: 33883
This commit is contained in:
Kim Woelders 2008-03-01 15:45:46 +00:00
parent f817e6c584
commit 28e21baf0b
1 changed files with 17 additions and 11 deletions

View File

@ -75,23 +75,29 @@ ECreatePixImg(Window win, int w, int h)
{
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);