|  | @@ -347,17 +347,17 @@ rt_err_t rt_thread_detach(rt_thread_t thread)
 | 
	
		
			
				|  |  |      /* change stat */
 | 
	
		
			
				|  |  |      thread->stat = RT_THREAD_CLOSE;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    /* detach object */
 | 
	
		
			
				|  |  | -    rt_object_detach((rt_object_t)thread);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    if (thread->cleanup != RT_NULL)
 | 
	
		
			
				|  |  | +    if ((rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) &&
 | 
	
		
			
				|  |  | +        thread->cleanup == RT_NULL)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        rt_object_detach((rt_object_t)thread);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  |          /* disable interrupt */
 | 
	
		
			
				|  |  |          lock = rt_hw_interrupt_disable();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          /* insert to defunct thread list */
 | 
	
		
			
				|  |  |          rt_list_insert_after(&rt_thread_defunct, &(thread->tlist));
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          /* enable interrupt */
 | 
	
		
			
				|  |  |          rt_hw_interrupt_enable(lock);
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -366,7 +366,6 @@ rt_err_t rt_thread_detach(rt_thread_t thread)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  RTM_EXPORT(rt_thread_detach);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  #ifdef RT_USING_HEAP
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * This function will create a thread object and allocate thread object memory
 |