Skip to content
Snippets Groups Projects
Commit 7575fa47 authored by deuce's avatar deuce
Browse files

Fix write -> read lock downgrade and some trivial bugs found by syncjslint

parent 0b7e7ab3
Branches
Tags
No related merge requests found
...@@ -6,9 +6,12 @@ ...@@ -6,9 +6,12 @@
// @format.tab-size 4, @format.use-tabs true // @format.tab-size 4, @format.use-tabs true
var LockedFiles=new Object(); var LockedFiles={};
js.on_exit("UnlockAll()"); js.on_exit("UnlockAll()");
if(js.global.LOG_ERR===undefined)
load("sbbsdefs.js");
function Lock(filename, lockid, forwrite, timeout) function Lock(filename, lockid, forwrite, timeout)
{ {
var readlock=new File(filename+".lock."+lockid); var readlock=new File(filename+".lock."+lockid);
...@@ -16,7 +19,7 @@ function Lock(filename, lockid, forwrite, timeout) ...@@ -16,7 +19,7 @@ function Lock(filename, lockid, forwrite, timeout)
var endtime=system.timer+timeout; var endtime=system.timer+timeout;
/* Do we already hold a lock on this file? */ /* Do we already hold a lock on this file? */
if(LockedFiles[filename] != undefined) { if(LockedFiles[filename] !== undefined) {
/* do we hold THIS lock on this file? */ /* do we hold THIS lock on this file? */
if(LockedFiles[filename].lockid == lockid) { if(LockedFiles[filename].lockid == lockid) {
if(LockedFiles[filename].forwrite == forwrite) if(LockedFiles[filename].forwrite == forwrite)
...@@ -24,14 +27,14 @@ function Lock(filename, lockid, forwrite, timeout) ...@@ -24,14 +27,14 @@ function Lock(filename, lockid, forwrite, timeout)
/* /*
* We currently hold a write lock and are requesting a read lock... * We currently hold a write lock and are requesting a read lock...
*/ */
if(forwrite==false) { if(forwrite===false) {
if(readlock.open("we")) { if(readlock.open("we")) {
readlock.close(); readlock.close();
LockedFiles[filename].forwrite==false; LockedFiles[filename].forwrite=false;
file_remote(writelock.name); file_remove(writelock.name);
} }
else { else {
log(LOG_ERROR, "!LOCK ERROR! -- cannot read lock a file we have write locked!"); log(LOG_ERR, "!LOCK ERROR! -- cannot read lock a file we have write locked!");
return(false); return(false);
} }
} }
...@@ -54,14 +57,14 @@ function Lock(filename, lockid, forwrite, timeout) ...@@ -54,14 +57,14 @@ function Lock(filename, lockid, forwrite, timeout)
if(writelock.open("we")) { if(writelock.open("we")) {
writelock.close(); writelock.close();
/* If we are upgading from a read lock, delete our read lock */ /* If we are upgading from a read lock, delete our read lock */
if(LockedFiles[filename]!=undefined) if(LockedFiles[filename]!==undefined)
file_remove(readlock.name); file_remove(readlock.name);
/* We have got the lock... wait for all read locks to close */ /* We have got the lock... wait for all read locks to close */
while(file_exists(filename+".lock.*")) { while(file_exists(filename+".lock.*")) {
mswait(1); mswait(1);
if(system.timer > endtime) { if(system.timer > endtime) {
/* If we were upgrading, restor our old lock... */ /* If we were upgrading, restor our old lock... */
if(LockedFiles[filename]!=undefined) { if(LockedFiles[filename]!==undefined) {
if(readlock.open("we")) { if(readlock.open("we")) {
readlock.close(); readlock.close();
} }
...@@ -70,7 +73,7 @@ function Lock(filename, lockid, forwrite, timeout) ...@@ -70,7 +73,7 @@ function Lock(filename, lockid, forwrite, timeout)
return(false); return(false);
} }
} }
LockedFiles[filename]=new Object(); LockedFiles[filename]={};
LockedFiles[filename].forwrite=true; LockedFiles[filename].forwrite=true;
LockedFiles[filename].lockid=lockid; LockedFiles[filename].lockid=lockid;
return(true); return(true);
...@@ -79,7 +82,7 @@ function Lock(filename, lockid, forwrite, timeout) ...@@ -79,7 +82,7 @@ function Lock(filename, lockid, forwrite, timeout)
else { else {
if(readlock.open("we")) { if(readlock.open("we")) {
readlock.close(); readlock.close();
LockedFiles[filename]=new Object(); LockedFiles[filename]={};
LockedFiles[filename].forwrite=false; LockedFiles[filename].forwrite=false;
LockedFiles[filename].lockid=lockid; LockedFiles[filename].lockid=lockid;
return(true); return(true);
...@@ -97,7 +100,7 @@ function Unlock(filename) ...@@ -97,7 +100,7 @@ function Unlock(filename)
var readlock; var readlock;
var writelock=new File(filename+".lock"); var writelock=new File(filename+".lock");
if(LockedFiles[filename]==undefined) if(LockedFiles[filename]===undefined)
return; return;
readlock=new File(filename+".lock."+LockedFiles[filename].lockid); readlock=new File(filename+".lock."+LockedFiles[filename].lockid);
...@@ -113,7 +116,7 @@ function UnlockAll() ...@@ -113,7 +116,7 @@ function UnlockAll()
{ {
var old_at=js.auto_terminate; var old_at=js.auto_terminate;
js.auto_terminate=false; js.auto_terminate=false;
for(filename in LockedFiles) { for(var filename in LockedFiles) {
Unlock(filename); Unlock(filename);
} }
js.auto_terminate=old_at; js.auto_terminate=old_at;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment