Whamcloud - gitweb
Branch b_release_1_4_6
authoradilger <adilger>
Thu, 5 Jan 2006 09:58:33 +0000 (09:58 +0000)
committeradilger <adilger>
Thu, 5 Jan 2006 09:58:33 +0000 (09:58 +0000)
Don't update thread->t_id as we exit from ptlrpc_main() after waking
t_ctl_waitq, as it is possible the thread struct is being freed by
ptlrpc_stop_thread() that was waiting on t_ctl_waitq.
r=alex

lustre/ptlrpc/service.c

index 7d5a65a..d2aaf5d 100644 (file)
@@ -923,17 +923,16 @@ out_srv_init:
                 svc->srv_done(thread);
 
 out:
-        spin_lock_irqsave(&svc->srv_lock, flags);
+        CDEBUG(D_NET, "service thread %d exiting: rc %d\n", thread->t_id, rc);
 
+        spin_lock_irqsave(&svc->srv_lock, flags);
         svc->srv_nthreads--;                    /* must know immediately */
+        thread->t_id = rc;
         thread->t_flags = SVC_STOPPED;
-        wake_up(&thread->t_ctl_waitq);
 
+        wake_up(&thread->t_ctl_waitq);
         spin_unlock_irqrestore(&svc->srv_lock, flags);
 
-        CDEBUG(D_NET, "service thread %d exiting: rc %d\n", thread->t_id, rc);
-        thread->t_id = rc;
-
         return rc;
 }