Mercurial > illumos > illumos-gate
changeset 9022:4eecb577dc66
6816281 unplugging USB keyboard produces panic in progressbar_key_abort_thread
author | Jan Setje-Eilers <Jan.Setje-Eilers@Sun.COM> |
---|---|
date | Thu, 12 Mar 2009 16:22:07 -0700 |
parents | 3b15214a2c50 |
children | 75687de6acb4 |
files | usr/src/uts/common/io/kbtrans/kbtrans_streams.c usr/src/uts/common/io/kbtrans/kbtrans_streams.h |
diffstat | 2 files changed, 9 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/uts/common/io/kbtrans/kbtrans_streams.c Thu Mar 12 15:41:34 2009 -0700 +++ b/usr/src/uts/common/io/kbtrans/kbtrans_streams.c Thu Mar 12 16:22:07 2009 -0700 @@ -199,7 +199,6 @@ ldi_ident_t li; extern void progressbar_key_abort(ldi_ident_t); - if (ldi_ident_from_stream(upper->kbtrans_streams_readq, &li) != 0) { cmn_err(CE_NOTE, "!ldi_ident_from_stream failed"); } else { @@ -213,7 +212,6 @@ ldi_ident_release(li); } - thread_exit(); } @@ -235,6 +233,7 @@ struct kbtrans *upper; struct kbtrans_lower *lower; int err; + kthread_t *tid; /* * Default to relatively generic tables. @@ -347,8 +346,9 @@ /* this counts on no keyboards being above ipl 12 */ mutex_init(&upper->progressbar_key_abort_lock, NULL, MUTEX_SPIN, (void *)ipltospl(12)); - (void) thread_create(NULL, 0, progressbar_key_abort_thread, - upper, 0, &p0, TS_RUN, minclsyspri); + tid = thread_create(NULL, 0, progressbar_key_abort_thread, upper, + 0, &p0, TS_RUN, minclsyspri); + upper->progressbar_key_abort_t_did = tid->t_did; DPRINTF(PRINT_L1, PRINT_MASK_OPEN, (upper, "kbtrans_streams_init " "exiting")); @@ -386,8 +386,11 @@ if (upper->progressbar_key_abort_flag == 0) { upper->progressbar_key_abort_flag = 2; cv_signal(&upper->progressbar_key_abort_cv); + mutex_exit(&upper->progressbar_key_abort_lock); + thread_join(upper->progressbar_key_abort_t_did); + } else { + mutex_exit(&upper->progressbar_key_abort_lock); } - mutex_exit(&upper->progressbar_key_abort_lock); cv_destroy(&upper->progressbar_key_abort_cv); mutex_destroy(&upper->progressbar_key_abort_lock);
--- a/usr/src/uts/common/io/kbtrans/kbtrans_streams.h Thu Mar 12 15:41:34 2009 -0700 +++ b/usr/src/uts/common/io/kbtrans/kbtrans_streams.h Thu Mar 12 16:22:07 2009 -0700 @@ -142,6 +142,7 @@ kcondvar_t progressbar_key_abort_cv; kmutex_t progressbar_key_abort_lock; int progressbar_key_abort_flag; + kt_did_t progressbar_key_abort_t_did; }; #ifdef __cplusplus