diff options
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/config.lib.inc | 4 | ||||
-rw-r--r-- | etc/inc/util.inc | 54 |
2 files changed, 33 insertions, 25 deletions
diff --git a/etc/inc/config.lib.inc b/etc/inc/config.lib.inc index 9ac40c9..05465c3 100644 --- a/etc/inc/config.lib.inc +++ b/etc/inc/config.lib.inc @@ -348,10 +348,10 @@ function conf_mount_ro() { if($platform == "cdrom" or $platform == "pfSense") return; - if($g['booting']) + if (refcount_unreference(1000) > 0) return; - if (refcount_unreference(1000) > 0) + if($g['booting']) return; clear_subsystem_dirty('mount'); diff --git a/etc/inc/util.inc b/etc/inc/util.inc index 94f1205..fee252c 100644 --- a/etc/inc/util.inc +++ b/etc/inc/util.inc @@ -179,37 +179,45 @@ function send_multiple_events($cmds) { } function refcount_init($reference) { - $shmid = shmop_open($reference, "c", 0644, 10); - shmop_write($shmid, 0, 0); - shmop_close($shmid); + $shmid = @shmop_open($reference, "c", 0644, 10); + @shmop_write($shmid, 0, 0); + @shmop_close($shmid); } function refcount_reference($reference) { - $shmid = @shmop_open($reference, "w", 0644, 10); - if (!$shmid) { - refcount_init($reference); - $shmid = shmop_open($reference, "w", 0644, 10); + try { + $shmid = @shmop_open($reference, "w", 0644, 10); + if (!$shmid) { + refcount_init($reference); + $shmid = @shmop_open($reference, "w", 0, 0); + } + $shm_data = @shmop_read($shmid, 0, 10); + $shm_data = intval($shm_data) + 1; + @shmop_write($shmid, $shm_data, 0); + @shmop_close($shmid); + } catch (Exception $e) { + log_error($e->getMessage()); } - $shm_data = shmop_read($shmid, 0, 10); - $shm_data = intval($shm_data) + 1; - shmop_write($shmid, $shm_data, 0); - shmop_close($shmid); - + return $shm_data; } function refcount_unreference($reference) { - /* We assume that the shared memory exists. */ - $shmid = shmop_open($reference, "w", 0644, 10); - $shm_data = shmop_read($shmid, 0, 10); - $shm_data = intval($shm_data) - 1; - if ($shm_data < 0) { - //debug_backtrace(); - log_error(sprintf(gettext("Reference %s is going negative, not doing unreference."), $reference)); - } else - shmop_write($shmid, $shm_data, 0); - shmop_close($shmid); - + try { + /* We assume that the shared memory exists. */ + $shmid = @shmop_open($reference, "w", 0, 0); + $shm_data = @shmop_read($shmid, 0, 10); + $shm_data = intval($shm_data) - 1; + if ($shm_data < 0) { + //debug_backtrace(); + log_error(sprintf(gettext("Reference %s is going negative, not doing unreference."), $reference)); + } else + @shmop_write($shmid, $shm_data, 0); + @shmop_close($shmid); + } catch (Exception $e) { + log_error($e->getMessage()); + } + return $shm_data; } |