Print this page
XXXX semaphores behavior is inconsistent in panicstr case

*** 22,33 **** /* * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ - #pragma ident "%Z%%M% %I% %E% SMI" - /* * This file contains the semaphore operations. */ #include <sys/param.h> --- 22,31 ----
*** 229,243 **** s = (sema_impl_t *)sp; sqlp = &SQHASH(s)->sq_lock; disp_lock_enter(sqlp); ASSERT(s->s_count >= 0); - while (s->s_count == 0) { if (panicstr) { disp_lock_exit(sqlp); return; } thread_lock_high(curthread); SEMA_BLOCK(s, sqlp); thread_unlock_nopreempt(curthread); swtch(); disp_lock_enter(sqlp); --- 227,241 ---- s = (sema_impl_t *)sp; sqlp = &SQHASH(s)->sq_lock; disp_lock_enter(sqlp); ASSERT(s->s_count >= 0); if (panicstr) { disp_lock_exit(sqlp); return; } + while (s->s_count == 0) { thread_lock_high(curthread); SEMA_BLOCK(s, sqlp); thread_unlock_nopreempt(curthread); swtch(); disp_lock_enter(sqlp);
*** 374,383 **** --- 372,385 ---- int gotit = 0; s = (sema_impl_t *)sp; sqh = SQHASH(s); disp_lock_enter(&sqh->sq_lock); + if (panicstr) { + disp_lock_exit(sqlp); + return (1); + } if (s->s_count > 0) { s->s_count--; gotit = 1; } disp_lock_exit(&sqh->sq_lock);