J'utilise le fragment de code suivant dans un script PHP pour mettre à jour en toute sécurité une ressource partagée.Erreur EINTR pour l'appel semop
$lock_id = sem_get(ftok('tmp/this.lock', 'r'));
sem_acquire($lock_id)
//do something
sem_release($lock_id)
Quand je test de stress ce code avec un grand nombre de demandes que j'obtiens une erreur:
Warning: semop() failed acquiring SYSVSEM_SETVAL for key 0x1e: No space left on device in blahblah.php on line 1293
sources php montrent le code suivant pour échec l'acquisition SYSVSEM_SETVAL
while (semop(semid, sop, 3) == -1) {
if (errno != EINTR) {
php3_error(E_WARNING, "semop() failed acquiring SYSVSEM_SETVAL for key 0x%x: %s", key, strerror(errno));
break;
}
}
qui signifie semop échoue avec EINTR. man page révèle que l'appel système semop() a été interrompu par un signal.
Ma question est de savoir si je peux ignorer cette erreur et réessayer sem_acquire?
Modifier: J'ai mal compris ce problème, Pl voir la clarification que j'ai posté ci-dessous.
raj