php/doc-en

sem_get add warning about freeing variable

Ouverte

#3 612 ouverte le 25 juil. 2024

 (1 commentaire) (0 réaction) (0 personne assignée)XML (882 forks)auto 404
enhancementgood first issue

Métriques du dépôt

Stars
 (596 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

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

Guide contributeur