PR_CEnterMonitor(self);
PR_Lock(self->lock);
PL_HandleEvent(PLEvent* self){        void* result;    if (self == NULL)        return;    /* This event better not be on an event queue anymore. */    PR_ASSERT(PR_CLIST_IS_EMPTY(&self->link));#ifdef PL_POST_TIMINGS    printf("$$$ last (%d) \n", PR_IntervalToMilliseconds(PR_IntervalNow() - self->postTime));#endif    result = (*self->handler)(self);    if (NULL != self->synchronousResult) {    PR_CEnterMonitor(self);    self->synchronousResult = result;    PR_CNotify(self);    /* wake up the guy waiting for the result */    PR_CExitMonitor(self);    }    else {    /* For asynchronous events, they're destroyed by the event-handler       thread. See PR_PostSynchronousEvent. */    PL_DestroyEvent(self);    }}