| 519 |
|
|
| 520 |
int set_user_list_pool_shm_readonly(void) |
int set_user_list_pool_shm_readonly(void) |
| 521 |
{ |
{ |
| 522 |
|
#ifndef __CYGWIN__ |
| 523 |
int shmid; |
int shmid; |
| 524 |
void *p_shm; |
void *p_shm; |
| 525 |
|
|
| 532 |
shmid = p_user_list_pool->shmid; |
shmid = p_user_list_pool->shmid; |
| 533 |
|
|
| 534 |
// Remap shared memory in read-only mode |
// Remap shared memory in read-only mode |
|
#if defined(__CYGWIN__) |
|
|
if (shmdt(p_user_list_pool) == -1) |
|
|
{ |
|
|
log_error("shmdt(user_list_pool) error (%d)\n", errno); |
|
|
return -1; |
|
|
} |
|
|
p_shm = shmat(shmid, p_user_list_pool, SHM_RDONLY); |
|
|
#else |
|
| 535 |
p_shm = shmat(shmid, p_user_list_pool, SHM_RDONLY | SHM_REMAP); |
p_shm = shmat(shmid, p_user_list_pool, SHM_RDONLY | SHM_REMAP); |
|
#endif |
|
| 536 |
if (p_shm == (void *)-1) |
if (p_shm == (void *)-1) |
| 537 |
{ |
{ |
| 538 |
log_error("shmat(user_list_pool shmid = %d) error (%d)\n", shmid, errno); |
log_error("shmat(user_list_pool shmid = %d) error (%d)\n", shmid, errno); |
| 540 |
} |
} |
| 541 |
|
|
| 542 |
p_user_list_pool = p_shm; |
p_user_list_pool = p_shm; |
| 543 |
|
#endif |
| 544 |
|
|
| 545 |
return 0; |
return 0; |
| 546 |
} |
} |
| 644 |
int user_list_try_rd_lock(int semid, int wait_sec) |
int user_list_try_rd_lock(int semid, int wait_sec) |
| 645 |
{ |
{ |
| 646 |
struct sembuf sops[2]; |
struct sembuf sops[2]; |
| 647 |
#if !defined(__CYGWIN__) |
#ifndef __CYGWIN__ |
| 648 |
struct timespec timeout; |
struct timespec timeout; |
| 649 |
#endif |
#endif |
| 650 |
int ret; |
int ret; |
| 657 |
sops[1].sem_op = 1; // lock |
sops[1].sem_op = 1; // lock |
| 658 |
sops[1].sem_flg = SEM_UNDO; // undo on terminate |
sops[1].sem_flg = SEM_UNDO; // undo on terminate |
| 659 |
|
|
| 660 |
#if defined(__CYGWIN__) |
#ifdef __CYGWIN__ |
| 661 |
ret = semop(semid, sops, 2); |
ret = semop(semid, sops, 2); |
| 662 |
#else |
#else |
| 663 |
timeout.tv_sec = wait_sec; |
timeout.tv_sec = wait_sec; |
| 676 |
int user_list_try_rw_lock(int semid, int wait_sec) |
int user_list_try_rw_lock(int semid, int wait_sec) |
| 677 |
{ |
{ |
| 678 |
struct sembuf sops[3]; |
struct sembuf sops[3]; |
| 679 |
#if !defined(__CYGWIN__) |
#ifndef __CYGWIN__ |
| 680 |
struct timespec timeout; |
struct timespec timeout; |
| 681 |
#endif |
#endif |
| 682 |
int ret; |
int ret; |
| 693 |
sops[2].sem_op = 0; // wait until unlocked |
sops[2].sem_op = 0; // wait until unlocked |
| 694 |
sops[2].sem_flg = 0; |
sops[2].sem_flg = 0; |
| 695 |
|
|
| 696 |
#if defined(__CYGWIN__) |
#ifdef __CYGWIN__ |
| 697 |
ret = semop(semid, sops, 3); |
ret = semop(semid, sops, 3); |
| 698 |
#else |
#else |
| 699 |
timeout.tv_sec = wait_sec; |
timeout.tv_sec = wait_sec; |