修改了IPC相关操作,包括:PV原语操作以及IPC变量获取操作。
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user