Subversion Repositories HelenOS-historic

Rev

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

Rev 1407 Rev 1427
Line 115... Line 115...
115
    psthread_exit();
115
    psthread_exit();
116
}
116
}
117
 
117
 
118
/** Schedule next userspace pseudo thread.
118
/** Schedule next userspace pseudo thread.
119
 *
119
 *
-
 
120
 * If calling with PS_TO_MANAGER parameter, the async_futex should be
-
 
121
 * held.
-
 
122
 *
120
 * @param tomanager If true, we are switching to next ready manager thread
123
 * @param tomanager If true, we are switching to next ready manager thread
121
 *                  (if none is found, thread is exited)
124
 *                  (if none is found, thread is exited)
122
 * @param frommanager If true, we are switching from manager thread
125
 * @param frommanager If true, we are switching from manager thread
123
 * @return 0 if there is no ready pseudo thread, 1 otherwise.
126
 * @return 0 if there is no ready pseudo thread, 1 otherwise.
124
 */
127
 */
Line 134... Line 137...
134
 
137
 
135
    if (ctype == PS_FROM_MANAGER && list_empty(&ready_list)) {
138
    if (ctype == PS_FROM_MANAGER && list_empty(&ready_list)) {
136
        goto ret_0;
139
        goto ret_0;
137
    }
140
    }
138
    /* If we are going to manager and none exists, create it */
141
    /* If we are going to manager and none exists, create it */
139
    if (ctype == PS_TO_MANAGER && list_empty(&manager_list))
142
    while (ctype == PS_TO_MANAGER && list_empty(&manager_list)) {
-
 
143
        futex_up(&psthread_futex);
140
        async_create_manager();
144
        async_create_manager();
-
 
145
        futex_down(&psthread_futex);
-
 
146
    }
141
 
147
 
142
    pt = __tcb_get()->pst_data;
148
    pt = __tcb_get()->pst_data;
143
    if (!context_save(&pt->ctx))
149
    if (!context_save(&pt->ctx))
144
        return 1; // futex_up already done here
150
        return 1; // futex_up already done here
145
 
151
 
Line 257... Line 263...
257
        return;
263
        return;
258
    }
264
    }
259
    list_remove(manager_list.next);
265
    list_remove(manager_list.next);
260
    futex_up(&psthread_futex);
266
    futex_up(&psthread_futex);
261
}
267
}
-
 
268
 
-
 
269
/** Return thread id of current running thread */
-
 
270
pstid_t psthread_get_id(void)
-
 
271
{
-
 
272
    return (pstid_t)__tcb_get()->pst_data;
-
 
273
}