Rev 3611 | Rev 3684 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3611 | Rev 3623 | ||
|---|---|---|---|
| Line 303... | Line 303... | ||
| 303 | mutex_unlock(&TASK->udebug.lock); |
303 | mutex_unlock(&TASK->udebug.lock); |
| 304 | 304 | ||
| 305 | udebug_wait_for_go(&THREAD->udebug.go_wq); |
305 | udebug_wait_for_go(&THREAD->udebug.go_wq); |
| 306 | } |
306 | } |
| 307 | 307 | ||
| 308 | /** Thread-creation event hook. |
308 | /** Thread-creation event hook combined with attaching the thread. |
| 309 | * |
309 | * |
| 310 | * Must be called when a new userspace thread is created in the debugged |
310 | * Must be called when a new userspace thread is created in the debugged |
| - | 311 | * task. Generates a THREAD_B event. Also attaches the thread @a t |
|
| - | 312 | * to the task @a ta. |
|
| - | 313 | * |
|
| - | 314 | * This is necessary to avoid a race condition where the BEGIN and THREAD_READ |
|
| - | 315 | * requests would be handled inbetween attaching the thread and checking it |
|
| - | 316 | * for being in a debugging session to send the THREAD_B event. We could then |
|
| - | 317 | * either miss threads or get some threads both in the thread list |
|
| 311 | * task. Generates a THREAD_B event. |
318 | * and get a THREAD_B event for them. |
| 312 | * |
319 | * |
| 313 | * @param t Structure of the thread being created. Not locked, as the |
320 | * @param t Structure of the thread being created. Not locked, as the |
| 314 | * thread is not executing yet. |
321 | * thread is not executing yet. |
| - | 322 | * @param ta Task to which the thread should be attached. |
|
| 315 | */ |
323 | */ |
| 316 | void udebug_thread_b_event(struct thread *t) |
324 | void udebug_thread_b_event_attach(struct thread *t, struct task *ta) |
| 317 | { |
325 | { |
| 318 | call_t *call; |
326 | call_t *call; |
| 319 | 327 | ||
| 320 | mutex_lock(&TASK->udebug.lock); |
328 | mutex_lock(&TASK->udebug.lock); |
| 321 | mutex_lock(&THREAD->udebug.lock); |
329 | mutex_lock(&THREAD->udebug.lock); |
| 322 | 330 | ||
| - | 331 | thread_attach(t, ta); |
|
| - | 332 | ||
| 323 | LOG("udebug_thread_b_event\n"); |
333 | LOG("udebug_thread_b_event\n"); |
| 324 | LOG("- check state\n"); |
334 | LOG("- check state\n"); |
| 325 | 335 | ||
| 326 | /* Must only generate events when in debugging session */ |
336 | /* Must only generate events when in debugging session */ |
| 327 | if (THREAD->udebug.debug_active != true) { |
337 | if (THREAD->udebug.debug_active != true) { |