Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure that exiting process releases locks #198

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

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