Message139130
[...]
> def free(self, block):
> if self._lock.acquire(False):
> self._exec_pending_free()
> self._free(block)
> else:
> # malloc holds the lock
> self._pending_free.append(block)
>
_pending_free uses a lock internally to make it thread-safe, so I
think this will have exactly the same problem (the trylock can fail in
case of contention or free() from multiple threads, thus we can't be
sure that the else clause is executed on behalf of the garbage
collector and it won't run while we're adding the block to
_pending_free).
Anyway, this seems complicated and error-prone, disabling the gc seems
the most straightforward way to handle that. |
|
Date |
User |
Action |
Args |
2011-06-25 23:33:18 | neologix | set | recipients:
+ neologix, pitrou, vstinner, greg.ath |
2011-06-25 23:33:18 | neologix | link | issue12352 messages |
2011-06-25 23:33:18 | neologix | create | |
|