Subversion Repositories HelenOS-historic

Rev

Rev 1579 | Rev 1593 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1579 Rev 1580
Line 309... Line 309...
309
    /*
309
    /*
310
     * Now we are firmly decided to go to sleep.
310
     * Now we are firmly decided to go to sleep.
311
     */
311
     */
312
    spinlock_lock(&THREAD->lock);
312
    spinlock_lock(&THREAD->lock);
313
 
313
 
314
    if (THREAD->interrupted) {
-
 
315
        spinlock_unlock(&THREAD->lock);
-
 
316
        spinlock_unlock(&wq->lock);
-
 
317
        return ESYNCH_INTERRUPTED;
-
 
318
    }
-
 
319
 
-
 
320
    if (flags & SYNCH_FLAGS_INTERRUPTIBLE) {
314
    if (flags & SYNCH_FLAGS_INTERRUPTIBLE) {
-
 
315
 
-
 
316
        /*
-
 
317
         * If the thread was already interrupted,
-
 
318
         * don't go to sleep at all.
-
 
319
         */
-
 
320
        if (THREAD->interrupted) {
-
 
321
            spinlock_unlock(&THREAD->lock);
-
 
322
            spinlock_unlock(&wq->lock);
-
 
323
            return ESYNCH_INTERRUPTED;
-
 
324
        }
-
 
325
 
321
        /*
326
        /*
322
         * Set context that will be restored if the sleep
327
         * Set context that will be restored if the sleep
323
         * of this thread is ever interrupted.
328
         * of this thread is ever interrupted.
324
         */
329
         */
325
        THREAD->sleep_interruptible = true;
330
        THREAD->sleep_interruptible = true;
326
        if (!context_save(&THREAD->sleep_interruption_context)) {
331
        if (!context_save(&THREAD->sleep_interruption_context)) {
327
            /* Short emulation of scheduler() return code. */
332
            /* Short emulation of scheduler() return code. */
328
            spinlock_unlock(&THREAD->lock);
333
            spinlock_unlock(&THREAD->lock);
329
            return ESYNCH_INTERRUPTED;
334
            return ESYNCH_INTERRUPTED;
330
        }
335
        }
-
 
336
 
331
    } else {
337
    } else {
332
        THREAD->sleep_interruptible = false;
338
        THREAD->sleep_interruptible = false;
333
    }
339
    }
334
 
340
 
335
    if (usec) {
341
    if (usec) {