Skip to content

Conversation

@mkoppanen
Copy link

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

@krakjoe
Copy link
Owner

krakjoe commented Oct 15, 2016

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 ?

@mkoppanen
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants