From: Ian Jackson Date: Thu, 7 Jul 2016 12:25:48 +0000 (+0100) Subject: tcl daemons: db-ensure-open, -close: Make idempotent X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=1a06e3e6919605d161a3d86b5a89632f1f74e31c;p=people%2Fliuw%2Fosstest.git tcl daemons: db-ensure-open, -close: Make idempotent Track whether we think the connection is open in dbopen. It is now therefore OK to call db-ensure-open and db-ensure-closed in other contexts. Signed-off-by: Ian Jackson --- diff --git a/tcl/JobDB-Executive.tcl b/tcl/JobDB-Executive.tcl index 5d5c1a1..4935e13 100644 --- a/tcl/JobDB-Executive.tcl +++ b/tcl/JobDB-Executive.tcl @@ -79,6 +79,7 @@ proc set-flight {} { } variable dbusers 0 +variable dbopen 0 ;# 1 means known to be open and good; 0 might mean broken proc db-open {} { variable dbusers @@ -96,6 +97,11 @@ proc db-close {} { db-ensure-closed } proc db-ensure-open {} { + variable dbopen + + if {$dbopen} return + catch { db-ensure-closed } ;# clean up any detritus + set pl { use Osstest; use Osstest::Executive; @@ -109,8 +115,12 @@ proc db-ensure-open {} { # is whitespace-separated. regsub -all {;} $db_pg_dsn { } conninfo pg_connect -conninfo $conninfo -connhandle dbh + + set dbopen 1 } proc db-ensure-closed {} { + variable dbopen + set dbopen 0 pg_disconnect dbh }