simple problem with sleeping/waking up

From: Marek Zawadzki (mzawadzk@cs.stevens-tech.edu)
Date: Thu Feb 28 2002 - 17:23:54 EST


Hello,

I want to implement the 2 following functions in 2.4.17 kernel:

fun1(struct sock *sk)
{
        GO_TO_SLEEP_SOMEHOW(sk->sleep???);
        while (some_pointer == NULL) {
                /* do nothing */
        }
}

fun2(struct sock *sk)
{
        /* some event occured -- data vailable */
        some_pointer == something;
        WAKE_SLEEPING_PROCESS(sk->sleep)
}

I am doing it in networking stack (not a module) to implement accept(fun1)
function. fun2 is supposed to be my main receiving function, which should
wake accept up after receiving some data.
So far I tried this:
accept(struct sock sk*)
{
        DECLARE_WAITQUEUE(wait, current);
        current->state = TASK_INTERRUPTIBLE;
        while (1) {
                schedule_timeout(timeo); /* process sleeps after that */
                if (some_pointer != NULL) {
                        break;
                }
        }
        current->state = TASK_RUNNING;
        remove_wait_queue(sk->sleep, &wait);
}

receive(struct sock sk*)
{
        /* after getting the data */A
        some_pointer = sk;
        wake_up_interruptible(sk->sleep); /* this hangs my machine :-(*/
}

Please help, it'll be so greatly appreciated, since I've spent almost a
week trying to do that...
-marek

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Feb 28 2002 - 21:00:45 EST