rem: free(scr->workspace_name_data);
add: wfree(scr->workspace_name_data);
context: showWorkspaceName(WScreen *scr, int workspace){    WorkspaceNameData *data;    RXImage *ximg;    Pixmap text, mask;    int w, h;    int px, py;    char *name = scr->workspaces[workspace]->name;    int len = strlen(name);    int x, y;    if (wPreferences.workspace_name_display_position == WD_NONE	|| scr->workspace_count < 2)	return;    if (scr->workspace_name_timer) {	WMDeleteTimerHandler(scr->workspace_name_timer);	XUnmapWindow(dpy, scr->workspace_name);	XFlush(dpy);    }    scr->workspace_name_timer = WMAddTimerHandler(WORKSPACE_NAME_DELAY,						  hideWorkpaceName, scr);    if (scr->workspace_name_data) {	RDestroyImage(scr->workspace_name_data->back);	RDestroyImage(scr->workspace_name_data->text);	free(scr->workspace_name_data);    }    data = wmalloc(sizeof(WorkspaceNameData));    w = WMWidthOfString(scr->workspace_name_font, name, len);    h = WMFontHeight(scr->workspace_name_font);    switch (wPreferences.workspace_name_display_position) {     case WD_TOP:	px = (scr->scr_width - (w+4))/2;	py = 0;	break;     case WD_BOTTOM:	px = (scr->scr_width - (w+4))/2;	py = scr->scr_height - (h+4);	break;     case WD_TOPLEFT:	px = 0;	py = 0;	break;     case WD_TOPRIGHT:	px = scr->scr_width - (w+4);	py = 0;	break;     case WD_BOTTOMLEFT:	px = 0;	py = scr->scr_height - (h+4);	break;     case WD_BOTTOMRIGHT:	px = scr->scr_width - (w+4);	py = scr->scr_height - (h+4);	break;     case WD_CENTER:     default:	px = (scr->scr_width - (w+4))/2;	py = (scr->scr_height - (h+4))/2;	break;    }    XResizeWindow(dpy, scr->workspace_name, w+4, h+4);    XMoveWindow(dpy, scr->workspace_name, px, py);    text = XCreatePixmap(dpy, scr->w_win, w+4, h+4, scr->w_depth);    mask = XCreatePixmap(dpy, scr->w_win, w+4, h+4, 1);    XSetForeground(dpy, scr->draw_gc, scr->black_pixel);    XFillRectangle(dpy, text, scr->draw_gc, 0, 0, w+4, h+4);    XSetForeground(dpy, scr->mono_gc, 0);    XFillRectangle(dpy, mask, scr->mono_gc, 0, 0, w+4, h+4);    XSetForeground(dpy, scr->mono_gc, 1);    for (x = 0; x <= 4; x++) {	for (y = 0; y <= 4; y++) {	    WMDrawString(scr->wmscreen, mask, scr->mono_gc,			 scr->workspace_name_font, x, y, name, len);	}    }    XSetForeground(dpy, scr->draw_gc, scr->white_pixel);    WMDrawString(scr->wmscreen, text, scr->draw_gc, scr->workspace_name_font, 		 2, 2, scr->workspaces[workspace]->name,		 strlen(scr->workspaces[workspace]->name));#ifdef SHAPE    XShapeCombineMask(dpy, scr->workspace_name, ShapeBounding, 0, 0, mask,		      ShapeSet);#endif    XSetWindowBackgroundPixmap(dpy, scr->workspace_name, text);    XClearWindow(dpy, scr->workspace_name);    data->text = RCreateImageFromDrawable(scr->rcontext, text, None);    XFreePixmap(dpy, text);    XFreePixmap(dpy, mask);    if (!data->text) {	XMapRaised(dpy, scr->workspace_name);	XFlush(dpy);	goto erro;    }    ximg = RGetXImage(scr->rcontext, scr->root_win, px, py,		      data->text->width, data->text->height);    if (!ximg || !ximg->image) {	goto erro;    }    XMapRaised(dpy, scr->workspace_name);    XFlush(dpy);    data->back = RCreateImageFromXImage(scr->rcontext, ximg->image, NULL);    RDestroyXImage(scr->rcontext, ximg);    if (!data->back) {	goto erro;    }    data->count = 10;    /* set a timeout for the effect */    data->timeout = time(NULL) + 2 +	(WORKSPACE_NAME_DELAY + WORKSPACE_NAME_FADE_DELAY*data->count)/1000;    scr->workspace_name_data = data;    return;erro:    if (scr->workspace_name_timer)	WMDeleteTimerHandler(scr->workspace_name_timer);    if (data->text)	RDestroyImage(data->text);    if (data->back)	RDestroyImage(data->back);    free(data);    scr->workspace_name_data = NULL;    scr->workspace_name_timer = WMAddTimerHandler(WORKSPACE_NAME_DELAY +						  10*WORKSPACE_NAME_FADE_DELAY,						  hideWorkpaceName, scr);}