Skip to content

Commit

Permalink
Merge pull request numpy#4841 from juliantaylor/alloc-hook-gc
Browse files Browse the repository at this point in the history
BUG: disable garbage collector during memory allocation hook
  • Loading branch information
charris committed Jul 5, 2014
2 parents 7a2b14a + c9c53ea commit 81242f6
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions tools/allocation_tracking/track_allocations.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import division, absolute_import, print_function

import numpy as np
import gc
import inspect
from alloc_hook import NumpyAllocHook

Expand Down Expand Up @@ -35,12 +36,21 @@ def __exit__(self, type, value, traceback):
self.numpy_hook.__exit__()

def hook(self, inptr, outptr, size):
# minimize the chances that the garbage collector kicks in during a
# cython __dealloc__ call and causes a double delete of the current
# object. To avoid this fully the hook would have to avoid all python
# api calls, e.g. by being implemented in C like python 3.4's
# tracemalloc module
gc_on = gc.isenabled()
gc.disable()
if outptr == 0: # it's a free
self.free_cb(inptr)
elif inptr != 0: # realloc
self.realloc_cb(inptr, outptr, size)
else: # malloc
self.alloc_cb(outptr, size)
if gc_on:
gc.enable()

def alloc_cb(self, ptr, size):
if size >= self.threshold:
Expand Down

0 comments on commit 81242f6

Please sign in to comment.