apcu
apcu copied to clipboard
Ensure that exiting process releases locks
Hey @krakjoe,
NOTE: not yet for merging
opening a pull request to work on getting robust mutexes to APCu. This is a first poke on implementing robustness (when a process exits it releases locks) to protect against hitting memory / time limit while holding lock (unsure if latter is prevent with the block_interruptions stuff).
Some implementation notes:
- pthread rwlocks don't support pthread_mutex_robust
- pthread mutex with robust mutex requires the mutex to be allocated to shared memory (based on my simple tests forking a mutex doesn't result in EOWNERDEAD if child exits while holding lock)
I was initially thinking about implementing simple rwlock using a mutex and cond variables but probably native platform primitives provide better performance. Although the current implementation is a bit nasty, it's a starting point for discussion on robust mutexes.
More reading: http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_consistent.html
This is causing many problems ...
I've read the patch, it's not so nasty ... if it works ...
@mkoppanen current state of this patch ?
@weltling what has windows got here ?
@krakjoe,
I think in terms of cleanup supporting native robust mutexes would be ideal (http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_mutex_consistent.html) as an addition. Other than that I am not sure if the assumptions made here are correct (unpaired locks can be costlier etc).
From what I can see there is no way to safely call any PHP API function that might call e* family allocators because being close to memory limit could trigger hard exit. thats quite 👎 from callers perspective.