#define MAX_NAMEDSEM_MGR 256
+static UlOsaSem_t* sem[MAX_NAMEDSEM_MGR]={0};
+
+
+unsigned int addptr(UlOsaSem_t*s) {
+ for (int i=0; i < MAX_NAMEDSEM_MGR; ++i) {
+ if (sem[i]==NULL) {sem[i]=s; return i;}
+ }
+ return -1;
+}
+
+
+UlOsaSem_t* getptr(unsigned int id) {
+ return sem[id];
+}
+
+
+void rmid(unsigned int id) {
+ sem[id]=NULL;
+}
+
+
static int UlOsaNamedSemCreate(const char pcName[10], int iCount,
int iAttribute, unsigned int* puiSmid) {
int iRetVal = OSAL_OK;
memcpy((void*)sem->bName, (const void*)pcName, (size_t)10);
sem->bName[10] = '\0';
- *puiSmid = (unsigned int)sem;
+ *puiSmid = addptr(sem);
return iRetVal;
}
struct timeval tv;
int ret;
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
if (!sem) {
return OSAL_ERROR;
}
static int UlOsaNamedSemRelease(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
struct sembuf semBuf;
if (!sem) {
}
static int UlOsaNamedSemReset(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
union semun semUnion;
if (!sem) {
}
static int UlOsaNamedSemGetval(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
int n;
if (!sem) {
*-----------------------------------------------------------------------------*/
/* TODO: apply iAttribute */
// COMMON_071008_1
+
+#define MAX_NAMEDSEM_MGR 256
+static UlOsaSem_t* sem[MAX_NAMEDSEM_MGR]={0};
+
+
+unsigned int addptr(UlOsaSem_t*s) {
+ for (int i=0; i < MAX_NAMEDSEM_MGR; ++i) {
+ if (sem[i]==NULL) {sem[i]=s; return i;}
+ }
+ return -1;
+}
+
+
+UlOsaSem_t* getptr(unsigned int id) {
+ return sem[id];
+}
+
+
+void rmid(unsigned int id) {
+ sem[id]=NULL;
+}
+
+
+
static int UlOsaSemCreate(const char bName[10], int iCount, int iAttribute,
unsigned int* puiSmid) {
UlOsaSem_t* sem;
memcpy((void*)sem->bName, (const void*)bName, (size_t)10);
sem->bName[10] = '\0';
- *puiSmid = (unsigned int)sem;
+ *puiSmid = addptr(sem);
return OSAL_OK;
}
static int UlOsaSemDelete(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
if (!sem) {
return OSAL_ERROR;
sem_destroy(&sem->sem);
free(sem);
+ rmid(uiSmid);
return OSAL_OK;
}
static int UlOsaSemGet(unsigned int uiSmid, int iFlags, int iTimeout) {
int ret;
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
if (!sem) {
return OSAL_ERROR;
}
static int UlOsaSemRelease(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
if (!sem) {
return OSAL_ERROR;
}
}
static int UlOsaSemReset(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
if (!sem) {
return OSAL_ERROR;
}
}
static int UlOsaSemGetval(unsigned int uiSmid) {
- UlOsaSem_t *sem = (UlOsaSem_t*)uiSmid;
+ UlOsaSem_t *sem = getptr(uiSmid);
int n;
if (!sem) {
return OSAL_ERROR;
//------------------------------------------------------------------------------
// $$$
*/
+
+
+pthread_mutex_t* mutexes[MAX_NAMEDSEM_MGR] = {0};
+
+unsigned int add_mutex(pthread_mutex_t* s) {
+ for (int i=0; i < MAX_NAMEDSEM_MGR; ++i) {
+ if (mutexes[i]==NULL) {mutexes[i]=s; return i;}
+ }
+ return -1;
+}
+
+
+pthread_mutex_t* get_mutex(unsigned int id) {
+ return mutexes[id];
+}
+
+
+void rmid_mutex(unsigned int id) {
+ mutexes[id]=NULL;
+}
+
+
int OsaMutCreate(const char bName[10], int iAttributes, unsigned int* puiMutid) {
pthread_mutexattr_t attr_t;
pthread_mutex_t* pmutex_t;
break;
}
- (*puiMutid) = (unsigned int)pmutex_t;
+ (*puiMutid) = add_mutex(pmutex_t);
pthread_mutexattr_destroy(&attr_t);
} else {
int OsaMutDelete(unsigned int uiMutid) {
int iRet;
- pthread_mutex_t* pmutex_t = (pthread_mutex_t *)uiMutid;
+ pthread_mutex_t* pmutex_t = get_mutex(uiMutid);
if (pmutex_t == NULL) {
return OSAL_OK;
}
}
free(pmutex_t);
+ rmid_mutex(uiMutid);
return OSAL_OK;
}
int OsaMutRelease(unsigned int uiMutid) {
int iRet;
- pthread_mutex_t* pmutex_t = (pthread_mutex_t *)uiMutid;
+ pthread_mutex_t* pmutex_t = get_mutex(uiMutid);
iRet = pthread_mutex_unlock(pmutex_t);
if (iRet < 0) {
perror("In OsaMutRelease() : failed ");
*/
int OsaMutGet(unsigned int uiMutid, int iFlags, int iTimeout) {
int iRet;
- pthread_mutex_t* pmutex_t = (pthread_mutex_t *)uiMutid;
+ pthread_mutex_t* pmutex_t = get_mutex(uiMutid);
iRet = pthread_mutex_lock(pmutex_t);
if (iRet < 0) {
perror("In OsaMutGet() : failed ");
int OsaMutTryGet(unsigned int uiMutid, int iFlags, int iTimeout) {
int iRet;
- pthread_mutex_t* pmutex_t = (pthread_mutex_t *)uiMutid;
+ pthread_mutex_t* pmutex_t = get_mutex(uiMutid);
iRet = pthread_mutex_trylock(pmutex_t);
if (iRet) {
return ((int)iRet);