Changeset 5573942 in mainline for kernel/generic/src/proc/thread.c


Ignore:
Timestamp:
2007-02-04T11:46:18Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
15819e37
Parents:
cf5ddf6
Message:

Revert thread_interrupt_sleep() to waitq_interrupt_sleep().
I'd prefer that this, IMO, waitq related stuff stays together.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/proc/thread.c

    rcf5ddf6 r5573942  
    679679}
    680680
    681 /** Interrupt sleeping thread.
    682  *
    683  * This routine attempts to interrupt a thread from its sleep in a waitqueue.
    684  * If the thread is not found sleeping, no action is taken.
    685  *
    686  * @param t Thread to be interrupted.
    687  */
    688 void thread_interrupt_sleep(thread_t *t)
    689 {
    690         waitq_t *wq;
    691         bool do_wakeup = false;
    692         ipl_t ipl;
    693 
    694         ipl = interrupts_disable();
    695         spinlock_lock(&threads_lock);
    696         if (!thread_exists(t))
    697                 goto out;
    698 
    699 grab_locks:
    700         spinlock_lock(&t->lock);
    701         if ((wq = t->sleep_queue)) {            /* assignment */
    702                 if (!(t->sleep_interruptible)) {
    703                         /*
    704                          * The sleep cannot be interrupted.
    705                          */
    706                         spinlock_unlock(&t->lock);
    707                         goto out;
    708                 }
    709                        
    710                 if (!spinlock_trylock(&wq->lock)) {
    711                         spinlock_unlock(&t->lock);
    712                         goto grab_locks;        /* avoid deadlock */
    713                 }
    714 
    715                 if (t->timeout_pending && timeout_unregister(&t->sleep_timeout))
    716                         t->timeout_pending = false;
    717 
    718                 list_remove(&t->wq_link);
    719                 t->saved_context = t->sleep_interruption_context;
    720                 do_wakeup = true;
    721                 t->sleep_queue = NULL;
    722                 spinlock_unlock(&wq->lock);
    723         }
    724         spinlock_unlock(&t->lock);
    725 
    726         if (do_wakeup)
    727                 thread_ready(t);
    728 
    729 out:
    730         spinlock_unlock(&threads_lock);
    731         interrupts_restore(ipl);
    732 }
    733 
    734681/** @}
    735682 */
Note: See TracChangeset for help on using the changeset viewer.