summaryrefslogtreecommitdiffstats
path: root/etc
diff options
context:
space:
mode:
Diffstat (limited to 'etc')
-rw-r--r--etc/inc/config.lib.inc4
-rw-r--r--etc/inc/util.inc54
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;
}
OpenPOWER on IntegriCloud