deforaos-jobs: revisit the locking

This commit is contained in:
Pierre Pronchery 2021-11-10 04:01:52 +01:00
parent 152baa6274
commit d68ac0e3c5

View File

@ -96,18 +96,18 @@ _database_exec()
fi fi
_database_init || return 2 _database_init || return 2
_database_lock || return 3 _database_lock "$DATABASE_FILE" || return 3
_database_query "$QUERY_EXEC_SELECT" | (IFS="|" _database_query "$QUERY_EXEC_SELECT" | (IFS="|"
read header read header
read empty jobs_id command empty read empty jobs_id command empty
if [ -z "$jobs_id" ]; then if [ -z "$jobs_id" ]; then
_database_unlock || return 4 _database_unlock "$DATABASE_FILE" || return 4
return 0 return 0
fi fi
#XXX TOCTOU #XXX TOCTOU
QUERY="UPDATE jobs SET started=datetime() WHERE jobs_id='$jobs_id'" QUERY="UPDATE jobs SET started=datetime() WHERE jobs_id='$jobs_id'"
_database_query "$QUERY" > "$DEVNULL" _database_query "$QUERY" > "$DEVNULL"
_database_unlock _database_unlock "$DATABASE_FILE"
code=-1 code=-1
if [ -n "$command" ]; then if [ -n "$command" ]; then
_info "Executing command: $command" _info "Executing command: $command"
@ -133,9 +133,9 @@ _database_init()
fi fi
if [ ! -f "$DATABASE_FILE" ]; then if [ ! -f "$DATABASE_FILE" ]; then
_info "Initializing the database" _info "Initializing the database"
_database_lock || return 3 _database_lock "$DATABASE_FILE" || return 3
_database_query "$QUERY_INIT" > "$DEVNULL" || ret=2 _database_query "$QUERY_INIT" > "$DEVNULL" || ret=2
_database_unlock || return 4 _database_unlock "$DATABASE_FILE" || return 4
fi fi
return $ret return $ret
} }
@ -157,7 +157,9 @@ _database_list()
#database_lock #database_lock
_database_lock() _database_lock()
{ {
$DEBUG $LOCK "${DATABASE_FILE%.db}" filename="$1"
$DEBUG $LOCK "$filename.lock"
} }
@ -171,7 +173,9 @@ _database_query()
#database_unlock #database_unlock
_database_unlock() _database_unlock()
{ {
$DEBUG $UNLOCK "${DATABASE_FILE%.db}" filename="$1"
$DEBUG $UNLOCK "$filename.lock"
} }