Commit e943c43f authored by Simon Marlow's avatar Simon Marlow
Browse files

fix memory leak in allocExec/freeExec (see bug #985)

parent b024f2af
...@@ -1046,13 +1046,17 @@ void freeExec (void *addr) ...@@ -1046,13 +1046,17 @@ void freeExec (void *addr)
bd->gen_no -= *(StgPtr)p; bd->gen_no -= *(StgPtr)p;
*(StgPtr)p = 0; *(StgPtr)p = 0;
// Free the block if it is empty, but not if it is the block at if (bd->gen_no == 0) {
// the head of the queue. // Free the block if it is empty, but not if it is the block at
if (bd->gen_no == 0 && bd != exec_block) { // the head of the queue.
debugTrace(DEBUG_gc, "free exec block %p", bd->start); if (bd != exec_block) {
dbl_link_remove(bd, &exec_block); debugTrace(DEBUG_gc, "free exec block %p", bd->start);
setExecutable(bd->start, bd->blocks * BLOCK_SIZE, rtsFalse); dbl_link_remove(bd, &exec_block);
freeGroup(bd); setExecutable(bd->start, bd->blocks * BLOCK_SIZE, rtsFalse);
freeGroup(bd);
} else {
bd->free = bd->start;
}
} }
RELEASE_SM_LOCK RELEASE_SM_LOCK
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment