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

sem_get add warning about freeing variable #3612

Open
ChrisHSandN opened this issue Jul 25, 2024 · 1 comment
Open

sem_get add warning about freeing variable #3612

ChrisHSandN opened this issue Jul 25, 2024 · 1 comment
Labels
enhancement New feature or request good first issue Good for newcomers

Comments

@ChrisHSandN
Copy link

From manual page: https://php.net/function.sem-get

sem_get() has an important gotcha where if the variable is freed then the semaphore is released. I propose this is not quite a bug but could do with a red warning box e.g.

Warning: sem_get will also auto_release the semaphore when the variable which holds it is freed (rather than the process ending). Ensure you store the result in a variable which is not overwritten, unset, or goes out of scope while the semaphore should be alive.

This behaviour can be demonstrated with the following:

$semGet = sem_get(1);

var_dump(sem_acquire($semGet, true));
// true: semaphore(1) acquired

var_dump(sem_acquire(sem_get(1), true));
// false: semaphore(1) already acquired

unset($semGet);

var_dump(sem_acquire(sem_get(1), true));
// true: semaphore(1) released by variable unset() so can be acquired again
@Girgias Girgias added enhancement New feature or request good first issue Good for newcomers labels Jul 26, 2024
@cmb69
Copy link
Member

cmb69 commented Jul 26, 2024

I would presume that this changed when the resources were converted to objects; might make sense to add that info to the note (or maybe to the changelog entry).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

3 participants