diff --git a/atom b/atom index 444137b..a477108 100755 --- a/atom +++ b/atom @@ -1269,15 +1269,9 @@ encodeFile::vorbis() { } worker() { - debug=2 - trap "kill -USR1 $masterpid" EXIT - trap - USR1 ALRM PIPE exec 2>>"$tempdir/worker$1.log" (( debug >= 2 )) && echo "${cmd_arg[@]}" >&2 "${cmd_arg[@]}" >/dev/null - status=$? - kill -USR1 $masterpid - exit $status } master() { @@ -1429,9 +1423,7 @@ master() { workerid=$(getworkerid) workertasks[workerid]=$taskid Update tasks status 1 <<<"id = $taskid" - export cmd_arg createworker $workerid - unset cmd_arg fi fi } @@ -1452,7 +1444,7 @@ getworkerid() { } createworker() { - worker & + worker $1 & workers[$1]=$! } @@ -1472,8 +1464,7 @@ gettaskinfos() { fileid, filename FROM tasks - WHERE - id='$1'; + WHERE id='$1'; ' >&3 read -u4 line taskid=${line%%|*} @@ -1491,8 +1482,9 @@ gettaskinfos() { } cleaner() { - for taskid in ${failedtasks[@]} + for key in ${!failedtasks[@]} do + taskid=${failedtasks[key]} gettaskinfos $taskid faildepends=$( Select tasks 'COUNT(*)' <<-EOWhere @@ -1511,12 +1503,12 @@ cleaner() { then rm -f "$cleanup" fi - unset failedtasks[taskid] + unset failedtasks[key] done - for taskid in ${finishedtasks[@]} + for key in ${!finishedtasks[@]} do + taskid=${finishedtasks[key]} gettaskinfos $taskid - Delete tasks <<<"id = $taskid" if [ -n "$destfilename" ] then echo \ @@ -1549,7 +1541,8 @@ cleaner() { then rm -f "$cleanup" fi - unset finishedtasks[taskid] + Delete tasks <<<"id = $taskid" + unset finishedtasks[key] done } @@ -1566,9 +1559,9 @@ checkworkers() { finishedtasks+=($taskid) else failedtasks+=($taskid) - (( ++ran )) (( ++failed )) fi + unset workertasks[key] fi done } @@ -2015,8 +2008,6 @@ done echo 'COMMIT;' >&3 echo -e "\rCreated ${count:-0} tasks for $filecount files (${copies:-0} immediate copies)" -masterpid=$$ -trap checkworkers USR1 ALRM PIPE concurrency=$(( maxload / 2 )) (( concurrency )) || concurrency=1 active=0 @@ -2031,7 +2022,7 @@ taskcount=$count failed=0 while (( ${#workers[@]} )) do - if read -n 1 -t 1 userinput + if read -n 1 -t 0.1 userinput then case $userinput in '+') @@ -2060,6 +2051,7 @@ do (( ++concurrency )) fi fi + checkworkers cleaner master if ((taskcount - remaining))