Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/synch/condvar.c

    r497bd656 rb7fd2a0  
    8080 * For exact description of meaning of possible combinations of usec and flags,
    8181 * see comment for waitq_sleep_timeout().  Note that when
    82  * SYNCH_FLAGS_NON_BLOCKING is specified here, ESYNCH_WOULD_BLOCK is always
     82 * SYNCH_FLAGS_NON_BLOCKING is specified here, EAGAIN is always
    8383 * returned.
    8484 *
    8585 * @return              See comment for waitq_sleep_timeout().
    8686 */
    87 int _condvar_wait_timeout(condvar_t *cv, mutex_t *mtx, uint32_t usec, int flags)
     87errno_t _condvar_wait_timeout(condvar_t *cv, mutex_t *mtx, uint32_t usec, int flags)
    8888{
    89         int rc;
     89        errno_t rc;
    9090        ipl_t ipl;
     91        bool blocked;
    9192
    9293        ipl = waitq_sleep_prepare(&cv->wq);
     
    9596
    9697        cv->wq.missed_wakeups = 0;      /* Enforce blocking. */
    97         rc = waitq_sleep_timeout_unsafe(&cv->wq, usec, flags);
     98        rc = waitq_sleep_timeout_unsafe(&cv->wq, usec, flags, &blocked);
     99        assert(blocked || rc != EOK);
    98100
    99         waitq_sleep_finish(&cv->wq, rc, ipl);
     101        waitq_sleep_finish(&cv->wq, blocked, ipl);
    100102        /* Lock only after releasing the waitq to avoid a possible deadlock. */
    101103        mutex_lock(mtx);
     
    117119 * For exact description of meaning of possible combinations of usec and flags,
    118120 * see comment for waitq_sleep_timeout().  Note that when
    119  * SYNCH_FLAGS_NON_BLOCKING is specified here, ESYNCH_WOULD_BLOCK is always
     121 * SYNCH_FLAGS_NON_BLOCKING is specified here, EAGAIN is always
    120122 * returned.
    121123 *
    122124 * @return See comment for waitq_sleep_timeout().
    123125 */
    124 int _condvar_wait_timeout_spinlock_impl(condvar_t *cv, spinlock_t *lock,
     126errno_t _condvar_wait_timeout_spinlock_impl(condvar_t *cv, spinlock_t *lock,
    125127        uint32_t usec, int flags)
    126128{
    127         int rc;
     129        errno_t rc;
    128130        ipl_t ipl;
    129        
     131        bool blocked;
     132
    130133        ipl = waitq_sleep_prepare(&cv->wq);
    131134
     
    134137
    135138        cv->wq.missed_wakeups = 0;      /* Enforce blocking. */
    136         rc = waitq_sleep_timeout_unsafe(&cv->wq, usec, flags);
     139        rc = waitq_sleep_timeout_unsafe(&cv->wq, usec, flags, &blocked);
     140        assert(blocked || rc != EOK);
    137141
    138         waitq_sleep_finish(&cv->wq, rc, ipl);
     142        waitq_sleep_finish(&cv->wq, blocked, ipl);
    139143        /* Lock only after releasing the waitq to avoid a possible deadlock. */
    140144        spinlock_lock(lock);
     
    152156 * For exact description of meaning of possible combinations of usec and flags,
    153157 * see comment for waitq_sleep_timeout().  Note that when
    154  * SYNCH_FLAGS_NON_BLOCKING is specified here, ESYNCH_WOULD_BLOCK is always
     158 * SYNCH_FLAGS_NON_BLOCKING is specified here, EAGAIN is always
    155159 * returned.
    156160 *
    157161 * @return See comment for waitq_sleep_timeout().
    158162 */
    159 int _condvar_wait_timeout_irq_spinlock(condvar_t *cv, irq_spinlock_t *irq_lock,
     163errno_t _condvar_wait_timeout_irq_spinlock(condvar_t *cv, irq_spinlock_t *irq_lock,
    160164        uint32_t usec, int flags)
    161165{
    162         int rc;
     166        errno_t rc;
    163167        /* Save spinlock's state so we can restore it correctly later on. */
    164168        ipl_t ipl = irq_lock->ipl;
Note: See TracChangeset for help on using the changeset viewer.