未验证 提交 4562ae12 编写于 作者: G guo 提交者: GitHub

[kernel] Revert modifications to the semaphore (#5682)

上级 aa80ba25
...@@ -485,9 +485,6 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time) ...@@ -485,9 +485,6 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time)
RT_ASSERT(sem != RT_NULL); RT_ASSERT(sem != RT_NULL);
RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore);
/* current context checking */
RT_DEBUG_SCHEDULER_AVAILABLE(time != 0);
RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(sem->parent.parent))); RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(sem->parent.parent)));
/* disable interrupt */ /* disable interrupt */
...@@ -517,6 +514,9 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time) ...@@ -517,6 +514,9 @@ rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time)
} }
else else
{ {
/* current context checking */
RT_DEBUG_SCHEDULER_AVAILABLE(RT_TRUE);
/* semaphore is unavailable, push to suspend list */ /* semaphore is unavailable, push to suspend list */
/* get current thread */ /* get current thread */
thread = rt_thread_self(); thread = rt_thread_self();
......
...@@ -203,7 +203,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size) ...@@ -203,7 +203,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size)
free_size = 0; free_size = 0;
/* lock memheap */ /* lock memheap */
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER);
if (result != RT_EOK) if (result != RT_EOK)
...@@ -316,7 +316,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size) ...@@ -316,7 +316,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size)
rt_memcpy(header_ptr->owner_thread_name, "NONE", sizeof(header_ptr->owner_thread_name)); rt_memcpy(header_ptr->owner_thread_name, "NONE", sizeof(header_ptr->owner_thread_name));
#endif /* RT_USING_MEMTRACE */ #endif /* RT_USING_MEMTRACE */
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
...@@ -332,7 +332,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size) ...@@ -332,7 +332,7 @@ void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size)
return (void *)((rt_uint8_t *)header_ptr + RT_MEMHEAP_SIZE); return (void *)((rt_uint8_t *)header_ptr + RT_MEMHEAP_SIZE);
} }
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
...@@ -394,7 +394,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) ...@@ -394,7 +394,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
void *new_ptr; void *new_ptr;
struct rt_memheap_item *next_ptr; struct rt_memheap_item *next_ptr;
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* lock memheap */ /* lock memheap */
result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER);
...@@ -475,7 +475,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) ...@@ -475,7 +475,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("new ptr: next_free 0x%08x, prev_free 0x%08x", RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("new ptr: next_free 0x%08x, prev_free 0x%08x",
next_ptr->next_free, next_ptr->next_free,
next_ptr->prev_free)); next_ptr->prev_free));
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
...@@ -485,7 +485,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) ...@@ -485,7 +485,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
} }
} }
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
...@@ -506,7 +506,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) ...@@ -506,7 +506,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
if (newsize + RT_MEMHEAP_SIZE + RT_MEMHEAP_MINIALLOC >= oldsize) if (newsize + RT_MEMHEAP_SIZE + RT_MEMHEAP_MINIALLOC >= oldsize)
return ptr; return ptr;
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* lock memheap */ /* lock memheap */
result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER);
...@@ -577,7 +577,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) ...@@ -577,7 +577,7 @@ void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize)
/* increment the available byte count. */ /* increment the available byte count. */
heap->available_size = heap->available_size + MEMITEM_SIZE(new_ptr); heap->available_size = heap->available_size + MEMITEM_SIZE(new_ptr);
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
...@@ -630,7 +630,7 @@ void rt_memheap_free(void *ptr) ...@@ -630,7 +630,7 @@ void rt_memheap_free(void *ptr)
RT_ASSERT(heap); RT_ASSERT(heap);
RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap); RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap);
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* lock memheap */ /* lock memheap */
result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER);
...@@ -716,7 +716,7 @@ void rt_memheap_free(void *ptr) ...@@ -716,7 +716,7 @@ void rt_memheap_free(void *ptr)
rt_memset(header_ptr->owner_thread_name, ' ', sizeof(header_ptr->owner_thread_name)); rt_memset(header_ptr->owner_thread_name, ' ', sizeof(header_ptr->owner_thread_name));
#endif /* RT_USING_MEMTRACE */ #endif /* RT_USING_MEMTRACE */
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
...@@ -744,7 +744,7 @@ void rt_memheap_info(struct rt_memheap *heap, ...@@ -744,7 +744,7 @@ void rt_memheap_info(struct rt_memheap *heap,
{ {
rt_err_t result; rt_err_t result;
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* lock memheap */ /* lock memheap */
result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER);
...@@ -764,7 +764,7 @@ void rt_memheap_info(struct rt_memheap *heap, ...@@ -764,7 +764,7 @@ void rt_memheap_info(struct rt_memheap *heap,
if (max_used != RT_NULL) if (max_used != RT_NULL)
*max_used = heap->max_used_size; *max_used = heap->max_used_size;
if (heap->locked == RT_FALSE && rt_thread_self() != RT_NULL) if (heap->locked == RT_FALSE)
{ {
/* release lock */ /* release lock */
rt_sem_release(&(heap->lock)); rt_sem_release(&(heap->lock));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册