apcu icon indicating copy to clipboard operation
apcu copied to clipboard

Ensure that exiting process releases locks

Open mkoppanen opened this issue 7 years ago • 2 comments

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

mkoppanen avatar Sep 25 '16 17:09 mkoppanen

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 avatar Oct 15 '16 06:10 krakjoe

@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.

mkoppanen avatar Oct 15 '16 09:10 mkoppanen