Changes in kernel/generic/src/proc/thread.c [96b02eb9:df58e44] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/proc/thread.c
r96b02eb9 rdf58e44 239 239 * Switch thread to the ready state. 240 240 * 241 * @param t Thread to make ready.241 * @param thread Thread to make ready. 242 242 * 243 243 */ … … 246 246 irq_spinlock_lock(&thread->lock, true); 247 247 248 ASSERT( !(thread->state == Ready));248 ASSERT(thread->state != Ready); 249 249 250 250 int i = (thread->priority < RQ_COUNT - 1) … … 338 338 339 339 thread->interrupted = false; 340 thread->btrace = false; 340 341 thread->detached = false; 341 342 waitq_initialize(&thread->join_wq); … … 535 536 /** Detach thread. 536 537 * 537 * Mark the thread as detached , if the thread is already in the Lingering538 * state, deallocate its resources.538 * Mark the thread as detached. If the thread is already 539 * in the Lingering state, deallocate its resources. 539 540 * 540 541 * @param thread Thread to be detached. … … 740 741 ASSERT(interrupts_disabled()); 741 742 ASSERT(irq_spinlock_locked(&threads_lock)); 742 743 743 744 thread_iterator_t iterator; 744 745 … … 751 752 } 752 753 754 void thread_stack_trace(thread_id_t thread_id) 755 { 756 irq_spinlock_lock(&threads_lock, true); 757 758 thread_t *thread = thread_find_by_id(thread_id); 759 if (thread == NULL) { 760 printf("No such thread.\n"); 761 irq_spinlock_unlock(&threads_lock, true); 762 return; 763 } 764 765 irq_spinlock_lock(&thread->lock, false); 766 767 /* 768 * Schedule a stack trace to be printed 769 * just before the thread is scheduled next. 770 * 771 * If the thread is sleeping then try to interrupt 772 * the sleep. Any request for printing an uspace stack 773 * trace from within the kernel should be always 774 * considered a last resort debugging means, therefore 775 * forcing the thread's sleep to be interrupted 776 * is probably justifiable. 777 */ 778 779 bool sleeping = false; 780 istate_t *istate = thread->udebug.uspace_state; 781 if (istate != NULL) { 782 printf("Scheduling thread stack trace.\n"); 783 thread->btrace = true; 784 if (thread->state == Sleeping) 785 sleeping = true; 786 } else 787 printf("Thread interrupt state not available.\n"); 788 789 irq_spinlock_unlock(&thread->lock, false); 790 791 if (sleeping) 792 waitq_interrupt_sleep(thread); 793 794 irq_spinlock_unlock(&threads_lock, true); 795 } 753 796 754 797 /** Process syscall to create new thread. … … 793 836 * has already been created. We need to undo its 794 837 * creation now. 795 *796 838 */ 797 839 … … 815 857 * THREAD_B events for threads that already existed 816 858 * and could be detected with THREAD_READ before. 817 *818 859 */ 819 860 udebug_thread_b_event_attach(thread, TASK);
Note:
See TracChangeset
for help on using the changeset viewer.