int u_mmFreeMem(struct mem_block *b) { if (!b) return 0; if (b->free) { debug_printf("block already free\n"); return -1; } if (b->reserved) { debug_printf("block is reserved\n"); return -1; } b->free = 1; b->next_free = b->heap->next_free; b->prev_free = b->heap; b->next_free->prev_free = b; b->prev_free->next_free = b; Join2Blocks(b); if (b->prev != b->heap) Join2Blocks(b->prev); return 0; }
int mmFreeMem(PMemBlock b) { TMemBlock *p,*prev; if (!b) return 0; if (!b->heap) { fprintf(stderr, "no heap\n"); return -1; } p = b->heap; prev = NULL; while (p && p != b) { prev = p; p = p->next; } if (!p || p->free || p->reserved) { if (!p) fprintf(stderr, "block not found in heap\n"); else if (p->free) fprintf(stderr, "block already free\n"); else fprintf(stderr, "block is reserved\n"); return -1; } p->free = 1; Join2Blocks(p); if (prev) Join2Blocks(prev); return 0; }
int via_mmFreeReserved(memHeap_t * heap, int offset) { TMemBlock *p, *prev; if (!heap) return -1; p = (TMemBlock *) heap; prev = NULL; while (p && p->ofs != offset) { prev = p; p = p->next; } if (!p || !p->reserved) return -1; p->free = 1; p->reserved = 0; Join2Blocks(p); if (prev) Join2Blocks(prev); return 0; }
int mmFreeMem(PMemBlock b) { TMemBlock *p, *prev; if (b == NULL) return 0; if (b->heap == NULL) return -1; p = b->heap; prev = NULL; while (p != NULL && p != b) { prev = p; p = p->next; } if (p == NULL || p->free || p->reserved) return -1; p->free = 1; Join2Blocks(p); if (prev) Join2Blocks(prev); return 0; }