@@ -104,8 +104,7 @@ thread_fini(void)
104
104
kthread_nr -- ; /* Main thread is exiting */
105
105
106
106
while (kthread_nr > 0 )
107
- VERIFY3S (pthread_cond_wait (& kthread_cond , & kthread_lock ), = = ,
108
- 0 );
107
+ VERIFY0 (pthread_cond_wait (& kthread_cond , & kthread_lock ));
109
108
110
109
ASSERT3S (kthread_nr , = = , 0 );
111
110
VERIFY3S (pthread_mutex_unlock (& kthread_lock ), = = , 0 );
@@ -181,6 +180,10 @@ zk_thread_create(caddr_t stk, size_t stksize, thread_func_t func, void *arg,
181
180
182
181
VERIFY3S (stksize , > , 0 );
183
182
stksize = P2ROUNDUP (MAX (stksize , TS_STACK_MIN ), PAGESIZE );
183
+ /*
184
+ * If this ever fails, it may be because the stack size is not a
185
+ * multiple of system page size.
186
+ */
184
187
VERIFY0 (pthread_attr_setstacksize (& attr , stksize ));
185
188
VERIFY0 (pthread_attr_setguardsize (& attr , PAGESIZE ));
186
189
@@ -199,11 +202,11 @@ zk_thread_exit(void)
199
202
200
203
umem_free (kt , sizeof (kthread_t ));
201
204
202
- pthread_mutex_lock (& kthread_lock );
205
+ VERIFY0 ( pthread_mutex_lock (& kthread_lock ) );
203
206
kthread_nr -- ;
204
- pthread_mutex_unlock (& kthread_lock );
207
+ VERIFY0 ( pthread_mutex_unlock (& kthread_lock ) );
205
208
206
- pthread_cond_broadcast (& kthread_cond );
209
+ VERIFY0 ( pthread_cond_broadcast (& kthread_cond ) );
207
210
pthread_exit ((void * )TS_MAGIC );
208
211
}
209
212
@@ -316,13 +319,15 @@ mutex_enter(kmutex_t *mp)
316
319
int
317
320
mutex_tryenter (kmutex_t * mp )
318
321
{
322
+ int err ;
319
323
ASSERT3U (mp -> m_magic , = = , MTX_MAGIC );
320
324
ASSERT3P (mp -> m_owner , != , MTX_DEST );
321
- if (0 == pthread_mutex_trylock (& mp -> m_lock )) {
325
+ if (0 == ( err = pthread_mutex_trylock (& mp -> m_lock ) )) {
322
326
ASSERT3P (mp -> m_owner , = = , MTX_INIT );
323
327
mp -> m_owner = curthread ;
324
328
return (1 );
325
329
} else {
330
+ VERIFY3S (err , = = , EBUSY );
326
331
return (0 );
327
332
}
328
333
}
@@ -464,14 +469,14 @@ cv_init(kcondvar_t *cv, char *name, int type, void *arg)
464
469
{
465
470
ASSERT3S (type , = = , CV_DEFAULT );
466
471
cv -> cv_magic = CV_MAGIC ;
467
- VERIFY3S (pthread_cond_init (& cv -> cv , NULL ), = = , 0 );
472
+ VERIFY0 (pthread_cond_init (& cv -> cv , NULL ));
468
473
}
469
474
470
475
void
471
476
cv_destroy (kcondvar_t * cv )
472
477
{
473
478
ASSERT3U (cv -> cv_magic , = = , CV_MAGIC );
474
- VERIFY3S (pthread_cond_destroy (& cv -> cv ), = = , 0 );
479
+ VERIFY0 (pthread_cond_destroy (& cv -> cv ));
475
480
cv -> cv_magic = 0 ;
476
481
}
477
482
@@ -481,9 +486,7 @@ cv_wait(kcondvar_t *cv, kmutex_t *mp)
481
486
ASSERT3U (cv -> cv_magic , = = , CV_MAGIC );
482
487
ASSERT3P (mutex_owner (mp ), = = , curthread );
483
488
mp -> m_owner = MTX_INIT ;
484
- int ret = pthread_cond_wait (& cv -> cv , & mp -> m_lock );
485
- if (ret != 0 )
486
- VERIFY3S (ret , = = , EINTR );
489
+ VERIFY0 (pthread_cond_wait (& cv -> cv , & mp -> m_lock ));
487
490
mp -> m_owner = curthread ;
488
491
}
489
492
@@ -497,7 +500,6 @@ cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime)
497
500
498
501
ASSERT3U (cv -> cv_magic , = = , CV_MAGIC );
499
502
500
- top :
501
503
delta = abstime - ddi_get_lbolt ();
502
504
if (delta <= 0 )
503
505
return (-1 );
@@ -519,10 +521,7 @@ cv_timedwait(kcondvar_t *cv, kmutex_t *mp, clock_t abstime)
519
521
if (error == ETIMEDOUT )
520
522
return (-1 );
521
523
522
- if (error == EINTR )
523
- goto top ;
524
-
525
- VERIFY3S (error , = = , 0 );
524
+ VERIFY0 (error );
526
525
527
526
return (1 );
528
527
}
@@ -536,10 +535,12 @@ cv_timedwait_hires(kcondvar_t *cv, kmutex_t *mp, hrtime_t tim, hrtime_t res,
536
535
timestruc_t ts ;
537
536
hrtime_t delta ;
538
537
539
- ASSERT (flag == 0 );
538
+ ASSERT (flag == 0 || flag == CALLOUT_FLAG_ABSOLUTE );
539
+
540
+ delta = tim ;
541
+ if (flag & CALLOUT_FLAG_ABSOLUTE )
542
+ delta -= gethrtime ();
540
543
541
- top :
542
- delta = tim - gethrtime ();
543
544
if (delta <= 0 )
544
545
return (-1 );
545
546
@@ -551,13 +552,10 @@ cv_timedwait_hires(kcondvar_t *cv, kmutex_t *mp, hrtime_t tim, hrtime_t res,
551
552
error = pthread_cond_timedwait (& cv -> cv , & mp -> m_lock , & ts );
552
553
mp -> m_owner = curthread ;
553
554
554
- if (error == ETIME )
555
+ if (error == ETIMEDOUT )
555
556
return (-1 );
556
557
557
- if (error == EINTR )
558
- goto top ;
559
-
560
- ASSERT (error == 0 );
558
+ VERIFY0 (error );
561
559
562
560
return (1 );
563
561
}
@@ -566,14 +564,14 @@ void
566
564
cv_signal (kcondvar_t * cv )
567
565
{
568
566
ASSERT3U (cv -> cv_magic , = = , CV_MAGIC );
569
- VERIFY3S (pthread_cond_signal (& cv -> cv ), = = , 0 );
567
+ VERIFY0 (pthread_cond_signal (& cv -> cv ));
570
568
}
571
569
572
570
void
573
571
cv_broadcast (kcondvar_t * cv )
574
572
{
575
573
ASSERT3U (cv -> cv_magic , = = , CV_MAGIC );
576
- VERIFY3S (pthread_cond_broadcast (& cv -> cv ), = = , 0 );
574
+ VERIFY0 (pthread_cond_broadcast (& cv -> cv ));
577
575
}
578
576
579
577
/*
0 commit comments