diff options
Diffstat (limited to 'src/libdraw/devdraw.c')
-rw-r--r-- | src/libdraw/devdraw.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/libdraw/devdraw.c b/src/libdraw/devdraw.c index 74e10c31..f4a3fd96 100644 --- a/src/libdraw/devdraw.c +++ b/src/libdraw/devdraw.c @@ -549,6 +549,8 @@ drawfreedimage(DImage *dimage) } ds = dimage->dscreen; l = dimage->image; + dimage->dscreen = nil; /* paranoia */ + dimage->image = nil; if(ds){ if(l->data == screenimage->data) addflush(l->layer->screenr); @@ -599,23 +601,14 @@ static int drawuninstall(Client *client, int id) { - DImage *d, *next; + DImage *d, **l; - d = client->dimage[id&HASHMASK]; - if(d == 0) - return -1; - if(d->id == id){ - client->dimage[id&HASHMASK] = d->next; - drawfreedimage(d); - return 0; - } - while(next = d->next){ /* assign = */ - if(next->id == id){ - d->next = next->next; - drawfreedimage(next); + for(l=&client->dimage[id&HASHMASK]; (d=*l) != nil; l=&d->next){ + if(d->id == id){ + *l = d->next; + drawfreedimage(d); return 0; } - d = next; } return -1; } |