Я использую семафор для синхронизации некоторых частей в моем приложении.
При освобождении семафора (sem_release) я получаю это предупреждение:
sem_release (): не удалось освободить ключ 0xc: неверный аргумент
Во-первых, я не знаю, выпустил ли семафор, но так как я не получаю «true» в результате, я думаю, что он не выпускает.
Версия PHP: 5.6.30
ipcs -V => ipcs от util-linux 2.25.2
Вот семафор:
key semid owner perms nsems
0x0000000c 4124122 myUser 666 3
Вот часть кода (класс Synchronization):
...
if ( !( $this->semaphoreId = sem_get( $this->id, 1 ) ) )
throw new RuntimeException( 'Error getting Semaphore.');
...
if ( !sem_acquire( $this->semaphoreId ) )
throw new RuntimeException( 'Error acquiring Semaphore.');
...
if ( !sem_release( $this->semaphoreId ) )
throw new RuntimeException( 'Error releasing Semaphore.');
Постскриптум Я получаю эту ошибку только в моей производственной среде, и я не могу воспроизвести / отладить в моей тестовой среде.
Я искал в интернете это сообщение об ошибке, но ничего не нашел.
Кто-нибудь знает, что означает это сообщение?
Отредактировано:
Не могли бы вы выполнить шаги с самого начала:
resource sem_get ( int $key [, int $max_acquire = 1 [, int $perm = 0666 [, int $auto_release = 1 ]]] )
bool sem_acquire ( resource $sem_identifier [, bool $nowait = false ] )
и добавьте проверки работоспособности, чтобы убедиться, что вышеуказанная функция возвращает ожидаемое значение.
Не могли бы вы также проверить, работает ли другая часть вашего приложения под тем же пользователем, чтобы избежать проблем с разрешениями.
Других решений пока нет …