function remove($item) { if (!sem_acquire($this->sem)) { throw new Scalr_System_Ipc_Exception("Cannot acquire semaphore"); } try { $ret = false; if (-1 != ($i = $this->indexOf($item))) { $this->logger->debug("remove item at '{$i}'"); $this->shm->remove($i); $meta = $this->getMeta(); $meta["size"]--; //$this->logger->debug("Set meta after remove: " . var_export($meta, true)); $this->putMeta($meta); $ret = true; } sem_release($this->sem); return $ret; } catch (Exception $e) { sem_release($this->sem); throw $e; } }
function offsetUnset($offset) { sem_acquire($this->sem()); try { $intOffset = crc32($offset); $this->shm->remove($intOffset); $meta = $this->shm->get(0); $meta["count"]--; array_splice($meta["keys"], array_search($offset, $meta["keys"]), 1); $this->shm->put(0, $meta); sem_release($this->sem()); } catch (Exception $e) { sem_release($this->sem()); throw $e; } }