diff options
| author | Cassio de Campos <cassiopc@gmail.com> | 2017-11-01 18:13:51 +0000 |
|---|---|---|
| committer | Cassio de Campos <cassiopc@gmail.com> | 2017-11-01 18:13:51 +0000 |
| commit | 92bda853b5c48a8cd4a4bdaa6272ad21c51cfe86 (patch) | |
| tree | bc37484046f5a6e9d228072f6259309ae1618741 | |
| parent | 8892bc8b32603e40d7c3d4856c47392675476787 (diff) | |
| download | boca-92bda853b5c48a8cd4a4bdaa6272ad21c51cfe86.tar.gz boca-92bda853b5c48a8cd4a4bdaa6272ad21c51cfe86.zip | |
avoid double transact
| -rw-r--r-- | src/fcontest.php | 6 | ||||
| -rw-r--r-- | src/frun.php | 21 |
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; } |