Dear Jim Pick:
I am currently analysing the source code of Kaffe,I find there are possibly something wrong in the implemention of the function "jcondvar_broadcast"and "jthread_stop" in
kaffe -1.1.4\kaffe\kaffevm\systems\unix-jhtreads,following is the source code


void jcondvar_broadcast(jcondvar *cv, jmutex *lock)
{
intsDisable();
if (*cv != NULL) {
/* splice the lists `*cv' and `lock->waiting' */
KaffeNodeQueue** condp;
/* advance to last element in cv list */
for (condp = cv; *condp != 0; condp = &(*condp)->next)
;
(*condp) = lock->waiting;
lock->waiting = *condp;
*condp = NULL;
}
intsRestore();
}
I think the correct implementation should be :
Your Orginal code: for (condp = cv; *condp != 0; condp = &(*condp)->next)
;
(*condp) = lock->waiting;
lock->waiting = *condp;
My Corrected code: for (condp = cv; (*condp)->next != 0; condp = &(*condp)->next)
;
(*condp) ->next = lock->waiting;
lock->waiting = *cv; after the "for" repeating clause,*condp == 0,this cause the node in the cv can't link the lock waiting queue,and after the link ,we should set the lock->waiting to be the first element of the new queue,am I right? hoping your reply.


void
jthread_stop(jthread *jtid)
{
    intsDisable();
    /* No reason to hit a dead man over the head */
    if (jtid->status != THREAD_DEAD) {
        jtid->flags |= THREAD_FLAGS_KILLED;
    }

/* if it's us, die */
if (jtid == jthread_current() && (jtid->flags & THREAD_FLAGS_DONTSTOP) != 0 && blockInts == 1)
die();


resumeThread(jtid);
IntsRestore();
}
Your source code:
if (jtid == jthread_current() && (jtid->flags & THREAD_FLAGS_DONTSTOP) != 0 && blockInts == 1)
die();
My corrected code:
if (jtid == jthread_current() && (jtid->flags & THREAD_FLAGS_DONTSTOP) == 0 && blockInts == 1)
die();
because only when we can stop a thread(the flag THREAD_FLAGS_DONTSTOP is not set) ,we should call the die(),otherwise,we can only resume the thread
I don’t know whether my understanding is right, I would be very glad if you tell me your viewpoint.
Hoping your reply!
steve dai
2004.5.31




_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to