Subversion Repositories HelenOS

Rev

Rev 2118 | Rev 2216 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2118 Rev 2183
Line 375... Line 375...
375
 * Assume THREAD->lock is held.
375
 * Assume THREAD->lock is held.
376
 */
376
 */
377
void scheduler_separated_stack(void)
377
void scheduler_separated_stack(void)
378
{
378
{
379
    int priority;
379
    int priority;
-
 
380
    DEADLOCK_PROBE_INIT(p_joinwq);
380
   
381
 
381
    ASSERT(CPU != NULL);
382
    ASSERT(CPU != NULL);
382
   
383
   
383
    if (THREAD) {
384
    if (THREAD) {
384
        /* must be run after the switch to scheduler stack */
385
        /* must be run after the switch to scheduler stack */
385
        after_thread_ran();
386
        after_thread_ran();
Line 404... Line 405...
404
                     * Avoid deadlock.
405
                     * Avoid deadlock.
405
                     */
406
                     */
406
                    spinlock_unlock(&THREAD->lock);
407
                    spinlock_unlock(&THREAD->lock);
407
                    delay(10);
408
                    delay(10);
408
                    spinlock_lock(&THREAD->lock);
409
                    spinlock_lock(&THREAD->lock);
-
 
410
                    DEADLOCK_PROBE(p_joinwq,
-
 
411
                        DEADLOCK_THRESHOLD);
409
                    goto repeat;
412
                    goto repeat;
410
                }
413
                }
411
                _waitq_wakeup_unsafe(&THREAD->join_wq, false);
414
                _waitq_wakeup_unsafe(&THREAD->join_wq, false);
412
                spinlock_unlock(&THREAD->join_wq.lock);
415
                spinlock_unlock(&THREAD->join_wq.lock);
413
               
416