rem: free(orec);
add: wfree(orec);
context: WMRemoveNotificationObserver(void *observer){    NotificationObserver *orec, *tmp, *rec;    /* get the list of actions the observer is doing */    orec = WMHashGet(notificationCenter->observerTable, observer);    /*     * FOREACH orec IN actionlist for observer     * DO     *   remove from respective lists/tables     *   free     * END     */    while (orec) {	tmp = orec->nextAction;	if (!orec->name && !orec->object) {	    /* catch-all */	    if (notificationCenter->nilList==orec)		notificationCenter->nilList = orec->next;	} else if (!orec->name) {	    /* any message coming from object */	    rec = WMHashGet(notificationCenter->objectTable, orec->object);	    if (rec==orec) {		/* replace table entry */		if (orec->next) {		    WMHashInsert(notificationCenter->objectTable, orec->object,				 orec->next);		} else {		    WMHashRemove(notificationCenter->objectTable, orec->object);		}	    }	} else {	    /* name && (object || !object) */	    rec = WMHashGet(notificationCenter->nameTable, orec->name);	    if (rec==orec) {		/* replace table entry */		if (orec->next) {		    WMHashInsert(notificationCenter->nameTable, orec->name,				 orec->next);		} else {		    WMHashRemove(notificationCenter->nameTable, orec->name);		}	    }	}	if (orec->prev)	    orec->prev->next = orec->next;	if (orec->next)	    orec->next->prev = orec->prev;	free(orec);		orec = tmp;    }    WMHashRemove(notificationCenter->observerTable, observer);}