Author: mav
Date: Wed Oct  8 19:54:42 2014
New Revision: 272765
URL: https://svnweb.freebsd.org/changeset/base/272765

Log:
  Remove one second wait for threads exit from icl_conn_close().
  
  Switch it from polling with pause() to using cv_wait()/cv_signal().

Modified:
  head/sys/dev/iscsi/icl.c

Modified: head/sys/dev/iscsi/icl.c
==============================================================================
--- head/sys/dev/iscsi/icl.c    Wed Oct  8 19:49:10 2014        (r272764)
+++ head/sys/dev/iscsi/icl.c    Wed Oct  8 19:54:42 2014        (r272765)
@@ -771,6 +771,7 @@ icl_receive_thread(void *arg)
 
        ICL_CONN_LOCK(ic);
        ic->ic_receive_running = false;
+       cv_signal(&ic->ic_send_cv);
        ICL_CONN_UNLOCK(ic);
        kthread_exit();
 }
@@ -1023,6 +1024,7 @@ icl_send_thread(void *arg)
        STAILQ_CONCAT(&ic->ic_to_send, &queue);
 
        ic->ic_send_running = false;
+       cv_signal(&ic->ic_send_cv);
        ICL_CONN_UNLOCK(ic);
        kthread_exit();
 }
@@ -1342,15 +1344,11 @@ icl_conn_close(struct icl_conn *ic)
        /*
         * Wake up the threads, so they can properly terminate.
         */
-       cv_signal(&ic->ic_receive_cv);
-       cv_signal(&ic->ic_send_cv);
        while (ic->ic_receive_running || ic->ic_send_running) {
                //ICL_DEBUG("waiting for send/receive threads to terminate");
-               ICL_CONN_UNLOCK(ic);
                cv_signal(&ic->ic_receive_cv);
                cv_signal(&ic->ic_send_cv);
-               pause("icl_close", 1 * hz);
-               ICL_CONN_LOCK(ic);
+               cv_wait(&ic->ic_send_cv, ic->ic_lock);
        }
        //ICL_DEBUG("send/receive threads terminated");
 
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to