Skip to content
Snippets Groups Projects
Commit 36522b3b authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Fix UID FETCH deadlock.

Also, after grabbing a lock, enter a try/catch that will unlock
and re-throw the error.
parent ce677196
No related branches found
No related tags found
No related merge requests found
......@@ -1394,6 +1394,7 @@ function open_cfg(usr)
return false;
}
lock_cfg();
try {
// Check if it's the old INI format...
if (cfgfile.length > 0) {
var ch = cfgfile.read(1);
......@@ -1406,6 +1407,11 @@ function open_cfg(usr)
else {
save_cfg(false);
}
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
return true;
}
......@@ -1686,9 +1692,15 @@ var authenticated_command_handlers = {
if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) {
lock_cfg();
try {
read_cfg(sub, false);
saved_config[sub].subscribed = true;
save_cfg(false);
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
tagged(tag, "OK", "Subscribed...");
}
......@@ -1704,9 +1716,15 @@ var authenticated_command_handlers = {
if(msg_area.sub[sub]!=undefined && msg_area.sub[sub].can_read) {
lock_cfg();
try {
read_cfg(sub, false);
saved_config[sub].subscribed = false;
save_cfg(false);
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
tagged(tag, "OK", "Unsubscribed...");
}
......@@ -1841,6 +1859,7 @@ function do_store(seq, uid, item, data)
var changed=false;
lock_cfg();
try {
read_cfg(index.code, false);
for(i in seq) {
idx=index.idx[seq[i]];
......@@ -1882,9 +1901,15 @@ function do_store(seq, uid, item, data)
js.gc();
}
save_cfg(false);
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
if(mod_seen && base.cfg != undefined) {
lock_cfg();
try {
read_cfg(base.cfg.code, false);
if(saved_config[base.cfg.code] == undefined) {
saved_config[base.cfg.code] = {subscribed:false};
......@@ -1899,6 +1924,11 @@ function do_store(seq, uid, item, data)
else
index.idx[seq[i]].attr &= ~MSG_READ;
save_cfg(false);
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
}
if(changed)
......@@ -2810,6 +2840,7 @@ var selected_command_handlers = {
var i;
lock_cfg();
try {
read_cfg(get_base_code(base), false);
for(i in seq) {
send_fetch_response(seq[i], data_items, false);
......@@ -2817,6 +2848,11 @@ var selected_command_handlers = {
break;
}
save_cfg(false);
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
js.gc();
tagged(tag, "OK", "There they are!");
......@@ -2865,6 +2901,7 @@ var selected_command_handlers = {
seq=parse_seq_set(args[2],true);
data_items=parse_data_items(args[3]);
lock_cfg();
try {
read_cfg(get_base_code(base), false);
for(i in seq) {
send_fetch_response(seq[i], data_items, true);
......@@ -2872,7 +2909,12 @@ var selected_command_handlers = {
break;
}
save_cfg(false);
lock_cfg();
}
catch (error) {
unlock_cfg();
throw error;
}
unlock_cfg();
js.gc();
tagged(tag, "OK", "There they are (with UIDs)!");
break;
......@@ -2986,6 +3028,7 @@ function read_cfg(sub, lck)
if (lck)
lock_cfg();
try {
if(saved_config[sub]==undefined)
saved_config[sub]={subscribed:false};
......@@ -3028,6 +3071,12 @@ function read_cfg(sub, lck)
}
}
}
}
catch (error) {
if (lck)
unlock_cfg();
throw error;
}
if (lck)
unlock_cfg();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment