--- a/sys/kern/sysv_sem.c +++ b/sys/kern/sysv_sem.c @@ -1002,8 +1002,19 @@ if (adjval == 0) continue; if (semundo_adjust(td->td_proc, semid, - sops[j].sem_num, adjval) != 0) - panic("semop - can't undo undos"); + sops[j].sem_num, adjval) != 0) { + /* + * Only possible when a sibling + * thread of this process raced + * our undo vector. Do not take + * the system down for it; leave + * the accounting as-is. + */ + kprintf("semop: SEM_UNDO rollback " + "lost a race, pid %d\n", + td->td_proc->p_pid); + break; + } } for (j = 0; j < nsops; j++) {