修改了IPC相关操作,包括:PV原语操作以及IPC变量获取操作。

This commit is contained in:
钟安
2015-12-02 09:38:32 +08:00
parent 9c3aa3e50b
commit db7499717f
2 changed files with 17 additions and 15 deletions

View File

@@ -330,12 +330,12 @@ static void init_sem(int *semid, CONFIG_FILE_ST *ptr)
key = 0x1d5200;
#endif
if((*semid = semget(key, 1, IPC_CREAT|0666)) == -1){
if((*semid = semget(key, 1, IPC_CREAT|IPC_EXCL|0666)) == -1){
snprintf(error_str, sizeof(error_str), "EMERG: semget():%s\n", strerror(errno));
record_log(error_str);
return;
}
if(semctl(*semid, 0, SETVAL, 0) == -1){
if(semctl(*semid, 0, SETVAL, 1) == -1){
snprintf(error_str, sizeof(error_str), "EMERG: semctl: %s !\n", strerror(errno));
record_log(error_str);
semctl(*semid, 0, IPC_RMID);
@@ -389,7 +389,7 @@ static void init_shm(SHM **ptr, CONFIG_FILE_ST *p)
record_log(error_str);
#endif
global_share_id = shmget( share_key, size, IPC_CREAT|0666 );
global_share_id = shmget( share_key, size, IPC_CREAT|IPC_EXCL|0666 );
if( global_share_id == -1 ) {
snprintf( error_str, sizeof( error_str ),
"EMERG: fail shmget, %s, 0x%x\n", strerror(errno), share_key);
@@ -428,14 +428,14 @@ static void get_sem(int semid)
char error_str[200];
lock[0].sem_num = 0;
lock[0].sem_op = 0;
lock[0].sem_op = -1;
lock[0].sem_flg = SEM_UNDO;
lock[1].sem_num = 0;
/*lock[1].sem_num = 0;
lock[1].sem_op = 1;
lock[1].sem_flg = SEM_UNDO;
lock[1].sem_flg = SEM_UNDO;*/
while(semop(semid, lock, 2)){
while(semop(semid, lock, 1)){
if(errno == EINTR)continue;
snprintf(error_str, sizeof(error_str), "EMERG: get_sem semop():%s\n", strerror(errno));
record_log(error_str);
@@ -450,7 +450,7 @@ static void release_sem(int semid)
struct sembuf unlock;
unlock.sem_num = 0;
unlock.sem_op = -1;
unlock.sem_op = 1;
unlock.sem_flg = SEM_UNDO;
if((ret = semop(semid, &unlock, 1)) == -1){
@@ -1074,6 +1074,8 @@ void sig_handler(int sig)
// snprintf(err_str, sizeof(err_str), "NOTICE: process exit by signal %d\n", sig);
// record_log(err_str);
semctl(semid,0,IPC_RMID,0);
shmctl(global_share_id,IPC_RMID,NULL);
exit(0);
}

View File

@@ -142,14 +142,14 @@ void get_sem(int semid)
struct sembuf lock[2];
lock[0].sem_num = 0;
lock[0].sem_op = 0;
lock[0].sem_op = -1;
lock[0].sem_flg = SEM_UNDO;
lock[1].sem_num = 0;
/* lock[1].sem_num = 0;
lock[1].sem_op = 1;
lock[1].sem_flg = SEM_UNDO;
lock[1].sem_flg = SEM_UNDO;*/
while(semop(semid, lock, 2)){
while(semop(semid, lock, 1)){
if (errno == EINTR) {
continue;
}
@@ -166,7 +166,7 @@ void release_sem(int semid)
struct sembuf unlock;
unlock.sem_num = 0;
unlock.sem_op = -1;
unlock.sem_op = 1;
unlock.sem_flg = SEM_UNDO;
if((ret = semop(semid, &unlock, 1)) == -1){
@@ -195,7 +195,7 @@ int init_nic_info(void)
#else
key = 0x1d5200;
#endif
if((semid = semget(key, 1, IPC_CREAT|0666)) == -1){
if((semid = semget(key, 1, 0666)) == -1){
snprintf(err_str, sizeof(err_str), "EMERG: Create semaphore error: %s\n", strerror(errno));
record_log(err_str);
return -1;
@@ -251,7 +251,7 @@ int init_nic_info(void)
record_log(err_str);
#endif
global_share_id = shmget( share_key, size, IPC_CREAT|0666 );
global_share_id = shmget( share_key, size, 0666 );
if( global_share_id == -1 ) {
snprintf( err_str, sizeof( err_str ),
"EMERG: fail shmget, %s, 0x%x\n", strerror(errno), share_key);