brillcodec: Avoid some multi-threading unsafe issue. 56/12256/1
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Wed, 13 Nov 2013 06:01:51 +0000 (15:01 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Wed, 13 Nov 2013 06:01:51 +0000 (15:01 +0900)
Change-Id: Idc46d39b0c5044b54ef3a2d5778d2bdb19c98a1e
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
drivers/maru/maru_brillcodec.c

index d01806a32cc9ef176d1ae064a853693d6850e3b2..1b4bebe79d3a005167289c04b7b523d5c578fe56 100644 (file)
@@ -350,13 +350,6 @@ static void release_device_memory(uint32_t mem_offset)
                        if (unit->mem_offset == (uint32_t)mem_offset) {
                                unit->blk_id = 0;
                                list_move_tail(&unit->entry, &block->available);
-                               if(block->last_buf_secured) {
-                                       up(&block->last_buf_semaphore);
-                                       block->last_buf_secured = 0;
-                               } else {
-                                       up(&block->semaphore);
-                               }
-                               DEBUG("unlock s_buffer_sema: %d\n", block->semaphore.count);
 
                                break;
                        }
@@ -366,6 +359,14 @@ static void release_device_memory(uint32_t mem_offset)
                ERROR("there is no used memory block.\n");
        }
        mutex_unlock(&block->access_mutex);
+
+       if(block->last_buf_secured) {
+               block->last_buf_secured = 0;
+               up(&block->last_buf_semaphore);
+       } else {
+               up(&block->semaphore);
+       }
+       DEBUG("unlock s_buffer_sema: %d\n", block->semaphore.count);
 }
 
 static void maru_brill_codec_info_cache(void)