php/doc-en

sem_get add warning about freeing variable

Aperta

#3612 aperta il 25 lug 2024

 (1 commento) (0 reazioni) (0 assegnatari)XML (882 fork)auto 404
enhancementgood first issue

Metriche repository

Star
 (596 stelle)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor