diff --git a/etc/inc/config.lib.inc b/etc/inc/config.lib.inc index 01bd7eccfe..9d5935d414 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 96a48c72ae..4bf56352f2 100644 --- a/etc/inc/util.inc +++ b/etc/inc/util.inc @@ -179,36 +179,44 @@ 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", 0, 0); + 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("Reference {$reference} is going negative, not doing unreference."); - } 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("Reference {$reference} is going negative, not doing unreference."); + } else + @shmop_write($shmid, $shm_data, 0); + @shmop_close($shmid); + } catch (Exception $e) { + log_error($e->getMessage()); + } return $shm_data; } @@ -1502,4 +1510,4 @@ function array_merge_recursive_unique($array0, $array1) { return $result; } -?> \ No newline at end of file +?>