aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCassio de Campos <cassiopc@gmail.com>2017-11-01 18:13:51 +0000
committerCassio de Campos <cassiopc@gmail.com>2017-11-01 18:13:51 +0000
commit92bda853b5c48a8cd4a4bdaa6272ad21c51cfe86 (patch)
treebc37484046f5a6e9d228072f6259309ae1618741 /src
parent8892bc8b32603e40d7c3d4856c47392675476787 (diff)
downloadboca-92bda853b5c48a8cd4a4bdaa6272ad21c51cfe86.tar.gz
boca-92bda853b5c48a8cd4a4bdaa6272ad21c51cfe86.zip
avoid double transact
Diffstat (limited to 'src')
-rw-r--r--src/fcontest.php6
-rw-r--r--src/frun.php21
2 files changed, 17 insertions, 10 deletions
diff --git a/src/fcontest.php b/src/fcontest.php
index 50b9a08..9787e1c 100644
--- a/src/fcontest.php
+++ b/src/fcontest.php
@@ -327,7 +327,11 @@ function DBDeleteUser($contest, $site, $user) {
$n = DBnlines($r);
for ($i=0;$i<$n;$i++) {
$a = DBRow($r,$i);
- DBRunDelete($a["number"],$a["site"],$contest,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"]);
+ if(DBRunDelete($a["number"],$a["site"],$contest,$_SESSION["usertable"]["usernumber"],$_SESSION["usertable"]["usersitenumber"],$c) === false) {
+ DBExec($c, "rollback work");
+ LOGLevel("User $user (site=$site,contest=$contest) could not be removed (run delete error).", 1);
+ return false;
+ }
}
DBExec($c, "commit work");
LOGLevel("User $user (site=$site,contest=$contest) marked as inactive.", 1);
diff --git a/src/frun.php b/src/frun.php
index f9b9c23..ed7f1b4 100644
--- a/src/frun.php
+++ b/src/frun.php
@@ -289,18 +289,21 @@ function DBRunGiveUp($number,$site,$contest,$usernumber,$usersite) {
"newstatus=$newstatus", 3);
return true;
}
-function DBRunDelete($number,$site,$contest,$user,$usersite) {
- $c = DBConnect();
- DBExec($c, "begin work", "DBRunDelete(transaction)");
+function DBRunDelete($number,$site,$contest,$user,$usersite,$cc=null) {
+ if($cc == null) {
+ $c = DBConnect();
+ DBExec($c, "begin work", "DBRunDelete(transaction)");
+ } else $c = $cc;
$sql = "select * from runtable as r where r.contestnumber=$contest and " .
"r.runsitenumber=$site and r.runnumber=$number";
$r = DBExec ($c, $sql . " for update", "DBRunDelete(get run for update)");
$n = DBnlines($r);
if ($n != 1) {
- DBExec($c, "rollback work", "DBRunDelete(rollback)");
- LogLevel("Unable to delete a run. ".
- "(run=$number, site=$site, contest=$contest)",1);
- return false;
+ if($cc == null)
+ DBExec($c, "rollback work", "DBRunDelete(rollback)");
+ LogLevel("Unable to delete a run. ".
+ "(run=$number, site=$site, contest=$contest)",1);
+ return false;
}
$temp = DBRow($r, 0);
@@ -320,8 +323,8 @@ function DBRunDelete($number,$site,$contest,$user,$usersite) {
": " . $p[0]["fullname"]), "", "", "t", $p[0]["color"], $p[0]["colorname"], $c);
}
}
-
- DBExec($c, "commit work", "DBRunDelete(commit)");
+ if($cc == null)
+ DBExec($c, "commit work", "DBRunDelete(commit)");
LOGLevel("Run deleted (run=$number, site=$site, contest=$contest, user=$user(site=$usersite)).", 3);
return true;
}