sem_release (): Schlüssel 0xc konnte nicht freigegeben werden: Ungültiges Argument

8

Ich verwende Semaphor, um einige Teile in meiner Anwendung zu synchronisieren.

Beim Freigeben des Semaphors (semrelease) bekomme ich diese Warnung:

  

sem_release (): Fehler beim Freigeben von Schlüssel 0xc: Ungültiges Argument

Zuerst weiß ich nicht, ob der Semaphor freigegeben wurde, aber da ich nicht "wahr" als Ergebnis bekomme, schätze ich, dass er nicht veröffentlicht wird.

PHP Version: 5.6.30

ipcs -V = & gt; ipcs von util-linux 2.25.2

Hier ist der Semaphor:

%Vor%

Hier ist ein Teil des Codes (Klasse Synchronisation):

%Vor%

P.S. Ich erhalte diesen Fehler nur in meiner produktiven Umgebung, und ich kann in meiner Testumgebung nicht reproduzieren / debuggen.

Ich habe im Internet nach dieser Fehlermeldung gesucht, aber ich habe nichts gefunden.

Weiß jemand, was diese Nachricht bedeutet?

Bearbeitet:

  1. Die Fehlermeldung wird nicht jedes Mal angezeigt, wenn das Skript ausgeführt wird.
  2. Ich bekomme tatsächlich manchmal den Fehler 'Error acquiring Semaphore' mit dem ähnlichen warning 'sem_acquire (): konnte Schlüssel 0xc: Identifier entfernt nicht erhalten, ABER nicht zur gleichen Zeit (Tag) bekomme ich den' Error release Semaphore '
  3. Die obige Klasse wird überall mit verschiedenen Schlüsseln verwendet, um einen Teil des Anwendungscodes zu synchronisieren. Ich habe keine Probleme mit anderen Schlüsseln. Und ja, diese Taste "12" / "0xc" wird NUR an einem Ort und von demselben Benutzer benutzt.
  4. Probleme mit der Berechtigung sollten nicht auftreten, denn wenn Sie die Berechtigung des Semaphors "0xc" überprüfen, ist "666"
dritan 17.05.2017, 13:17
quelle

1 Antwort

1

Konnten Sie die Schritte von Anfang an folgen:

  • Den Semaphor resource sem_get ( int $key [, int $max_acquire = 1 [, int $perm = 0666 [, int $auto_release = 1 ]]] ) erhalten
  • Erwerb des Semaphors bool sem_acquire ( resource $sem_identifier [, bool $nowait = false ] )

und fügen Sie Plausibilitätsprüfungen hinzu, um sicherzustellen, dass die obige Funktion den erwarteten Wert zurückgibt.

Sie können auch überprüfen, ob der andere Teil Ihrer Anwendung unter demselben Benutzer ausgeführt wird, um Berechtigungsprobleme zu vermeiden.

    
Rares Harnagea 21.05.2017 17:37
quelle

Tags und Links