Ignore:
File:
1 edited

Legend:

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

    ree42e43 r48dcc69  
    4848#include <synch/spinlock.h>
    4949#include <synch/waitq.h>
     50#include <synch/rwlock.h>
    5051#include <cpu.h>
    5152#include <str.h>
     
    328329        thread->flags = flags;
    329330        thread->state = Entering;
     331        thread->call_me = NULL;
     332        thread->call_me_with = NULL;
    330333       
    331334        timeout_initialize(&thread->sleep_timeout);
     
    340343        thread->detached = false;
    341344        waitq_initialize(&thread->join_wq);
     345       
     346        thread->rwlock_holder_type = RWLOCK_NONE;
    342347       
    343348        thread->task = task;
     
    578583       
    579584        (void) waitq_sleep_timeout(&wq, usec, SYNCH_FLAGS_NON_BLOCKING);
     585}
     586
     587/** Register thread out-of-context invocation
     588 *
     589 * Register a function and its argument to be executed
     590 * on next context switch to the current thread. Must
     591 * be called with interrupts disabled.
     592 *
     593 * @param call_me      Out-of-context function.
     594 * @param call_me_with Out-of-context function argument.
     595 *
     596 */
     597void thread_register_call_me(void (* call_me)(void *), void *call_me_with)
     598{
     599        irq_spinlock_lock(&THREAD->lock, false);
     600        THREAD->call_me = call_me;
     601        THREAD->call_me_with = call_me_with;
     602        irq_spinlock_unlock(&THREAD->lock, false);
    580603}
    581604
Note: See TracChangeset for help on using the changeset viewer.