FreeCalypso > hg > freecalypso-sw
diff gsm-fw/gpf/osl/os_mem_fl.c @ 399:d26a9e3de626
OSL: os_mem_fl.c done
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Sun, 15 Jun 2014 00:47:06 +0000 |
parents | 2dc9f34e3036 |
children | dcb543907cbb |
line wrap: on
line diff
--- a/gsm-fw/gpf/osl/os_mem_fl.c Fri Jun 13 22:12:05 2014 +0000 +++ b/gsm-fw/gpf/osl/os_mem_fl.c Sun Jun 15 00:47:06 2014 +0000 @@ -386,8 +386,37 @@ ULONG PoolSize, OS_HANDLE *PoolHandle) { STATUS sts; + USHORT i; sts = NU_Obtain_Semaphore(&MemSemCB, NU_SUSPEND); - - + for (i = 0; i < NumOfMemoryPools; i++) + if (!strncmp(Name, MemPoolTable[i].name, RESOURCE_NAMELEN-1)) { + *PoolHandle = i; + if (sts == NU_SUCCESS) + NU_Release_Semaphore(&MemSemCB); + return(OS_OK); + } + if (i >= MaxMemoryPools) { +release_sem_return_err: + if (sts == NU_SUCCESS) + NU_Release_Semaphore(&MemSemCB); + return(OS_ERROR); + } + if (i) { + if (os_AllocateMemory(OS_NOTASK, + (T_VOID_STRUCT **) &MemPoolTable[i].pcb, + sizeof(NU_MEMORY_POOL), OS_NO_SUSPEND, + os_ext_pool_handle) != OS_OK) + goto release_sem_return_err; + } + if (NU_Create_Memory_Pool(MemPoolTable[i].pcb, Name, Addr, PoolSize, + 4, NU_FIFO) != NU_SUCCESS) + goto release_sem_return_err; + strncpy(MemPoolTable[i].name, Name, RESOURCE_NAMELEN); + MemPoolTable[i].name[RESOURCE_NAMELEN-1] = 0; + *PoolHandle = i; + NumOfMemoryPools++; + if (sts == NU_SUCCESS) + NU_Release_Semaphore(&MemSemCB); + return(OS_OK); }