Changeset 84683fdc in mainline
- Timestamp:
- 2009-07-21T20:37:18Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5462a30
- Parents:
- 8e1dc00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/trace/trace.c
r8e1dc00 r84683fdc 73 73 uintptr_t thash; 74 74 volatile int paused; 75 fibril_condvar_t paused_cv; 76 fibril_mutex_t paused_lock; 75 fibril_condvar_t state_cv; 76 fibril_mutex_t state_lock; 77 78 int cev_valid; 79 console_event_t cev; 77 80 78 81 void thread_trace_start(uintptr_t thread_hash); … … 86 89 87 90 static int program_run_fibril(void *arg); 91 static int cev_fibril(void *arg); 88 92 89 93 static void program_run(void) … … 92 96 93 97 fid = fibril_create(program_run_fibril, NULL); 98 if (fid == 0) { 99 printf("Error creating fibril\n"); 100 exit(1); 101 } 102 103 fibril_add_ready(fid); 104 } 105 106 static void cev_fibril_start(void) 107 { 108 fid_t fid; 109 110 fid = fibril_create(cev_fibril, NULL); 94 111 if (fid == 0) { 95 112 printf("Error creating fibril\n"); … … 457 474 while (!abort_trace) { 458 475 459 fibril_mutex_lock(& paused_lock);476 fibril_mutex_lock(&state_lock); 460 477 if (paused) { 461 478 printf("Thread [%d] paused. Press R to resume.\n", … … 463 480 464 481 while (paused) 465 fibril_condvar_wait(& paused_cv, &paused_lock);482 fibril_condvar_wait(&state_cv, &state_lock); 466 483 467 484 printf("Thread [%d] resumed.\n", thread_id); 468 485 } 469 fibril_mutex_unlock(& paused_lock);486 fibril_mutex_unlock(&state_lock); 470 487 471 488 /* Run thread until an event occurs */ … … 489 506 case UDEBUG_EVENT_STOP: 490 507 printf("Stop event\n"); 491 fibril_mutex_lock(& paused_lock);508 fibril_mutex_lock(&state_lock); 492 509 paused = 1; 493 fibril_mutex_unlock(& paused_lock);510 fibril_mutex_unlock(&state_lock); 494 511 break; 495 512 case UDEBUG_EVENT_THREAD_B: … … 498 515 case UDEBUG_EVENT_THREAD_E: 499 516 printf("Thread 0x%lx exited.\n", val0); 517 fibril_mutex_lock(&state_lock); 500 518 abort_trace = 1; 519 fibril_condvar_broadcast(&state_cv); 520 fibril_mutex_unlock(&state_lock); 501 521 break; 502 522 default: … … 593 613 } 594 614 615 static int cev_fibril(void *arg) 616 { 617 (void) arg; 618 619 printf("cev_fibril()\n"); 620 while (true) { 621 printf("cev_fibril: wait for cev_valid == 0\n"); 622 fibril_mutex_lock(&state_lock); 623 while (cev_valid) 624 fibril_condvar_wait(&state_cv, &state_lock); 625 fibril_mutex_unlock(&state_lock); 626 627 printf("cev_fibril: wait for key\n"); 628 629 if (!console_get_event(fphone(stdin), &cev)) 630 return -1; 631 632 printf("cev_fibril: broadcast cev_valid = 1\n"); 633 634 fibril_mutex_lock(&state_lock); 635 cev_valid = 1; 636 fibril_condvar_broadcast(&state_cv); 637 fibril_mutex_unlock(&state_lock); 638 } 639 } 640 595 641 static void trace_task(task_id_t task_id) 596 642 { … … 623 669 624 670 while (!done) { 625 if (!console_get_event(fphone(stdin), &ev)) 626 return; 671 printf("trace_task: wait for cev_valid || abort_trace\n"); 672 fibril_mutex_lock(&state_lock); 673 while (!cev_valid && !abort_trace) 674 fibril_condvar_wait(&state_cv, &state_lock); 675 fibril_mutex_unlock(&state_lock); 676 677 printf("trace_task: got something\n"); 678 679 ev = cev; 680 681 fibril_mutex_lock(&state_lock); 682 cev_valid = false; 683 fibril_condvar_broadcast(&state_cv); 684 fibril_mutex_unlock(&state_lock); 685 686 if (abort_trace) 687 break; 627 688 628 689 if (ev.type != KEY_PRESS) … … 640 701 break; 641 702 case KC_R: 642 fibril_mutex_lock(& paused_lock);703 fibril_mutex_lock(&state_lock); 643 704 paused = 0; 644 fibril_condvar_broadcast(& paused_cv);645 fibril_mutex_unlock(& paused_lock);705 fibril_condvar_broadcast(&state_cv); 706 fibril_mutex_unlock(&state_lock); 646 707 printf("Resume...\n"); 647 708 break; … … 683 744 next_thread_id = 1; 684 745 paused = 0; 685 fibril_mutex_initialize(&paused_lock); 686 fibril_condvar_initialize(&paused_cv); 746 cev_valid = 0; 747 748 fibril_mutex_initialize(&state_lock); 749 fibril_condvar_initialize(&state_cv); 687 750 688 751 proto_init(); … … 874 937 } 875 938 939 cev_fibril_start(); 876 940 trace_task(task_id); 877 941
Note:
See TracChangeset
for help on using the changeset viewer.