"^C" problem when multithreads stop at "sudo -v"
authorYigang Wen <yigangx.wen@intel.com>
Tue, 16 Oct 2012 08:41:42 +0000 (16:41 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Tue, 16 Oct 2012 22:48:31 +0000 (06:48 +0800)
when multithreads stop at "sudo -v", you need input ^C more than
one time to terminate depanneur. The reason is main thread blocked
by "lock($DETACHING)" and it can't response to ^C immediately. So
use another lock variable "$SUDOV_LOCK" for "sudo -v".

depanneur

index 6c9bd82bafce00230cda9c7666d00590a8b7b14e..dc49453837c88b336220a01f92cab9f8b20a1632 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -32,6 +32,9 @@ my $TERM:shared=0;
 # Prevents double detach attempts
 my $DETACHING:shared;
 
+# Prevents main thread response to "^C" be blocked by DETACHING
+my $SUDOV_LOCK:shared;
+
 # Flag to inform main thread update pkgdeps
 my $dirty:shared=0;
 
@@ -789,7 +792,7 @@ sub build_package {
     my @args = ();
     my @args_inc = ();
     {
-        lock ($DETACHING);
+        lock ($SUDOV_LOCK);
         if ($TERM == 1 || my_system("sudo -v") != 0) {
             return -1;
         }