protected function resize($size)
{
if ($size > $this->max_size) {
return false;
}
//should be called AFTER reading memory (to not loose changing of variables)
if (empty($this->mem)) {
return false;
}
ignore_user_abort(true);
set_time_limit(180);
if (is_array($this->mem)) {
$this->mem[self::map_info][self::map_info_resized] = $this->mem[self::map_info][self::map_info_resized] + 1;
$this->mem[self::map_info][self::map_info_resizetime] = time();
}
shmop_delete($this->shm);
shmop_close($this->shm);
$t = serialize($this->mem);
$memsize = strlen($t);
if ($memsize > $size) {
$size = $memsize + 1000;
}
$this->shm = shmop_open($this->shmkey, "n", 0777, $size);
if (!$this->shm) {
return false;
}
//mmm... oops.
unset($this->mem);
$w = shmop_write($this->shm, str_pad($t, shmop_size($this->shm), ' ', STR_PAD_RIGHT), 0);
if (!$w) {
return false;
}
return true;
}