25 #ifdef _SEM_SEMUN_UNDEFINED
29 unsigned short *array;
30 struct seminfo *__buf;
37 struct shmid_ds shm_desc;
54 buffer = shmat (shmid, NULL, 0);
55 if (buffer == (
void*)-1) {
60 shmctl (shmid, IPC_STAT, &shm_desc);
64 semid = semget (IPC_PRIVATE, 2, S_IRWXU + S_IRWXG + S_IRWXO);
74 semctl (semid, 0, SETVAL, semopts);
76 semctl (semid, 1, SETVAL, semopts);
89 xmms_log_info (
"Visualization client %d initialised using Unix SHM",
id);
96 semctl (t->
semid, 0, IPC_RMID, 0);
106 struct sembuf op = { 0, -1, IPC_NOWAIT };
108 while (semop (t->
semid, &op, 1) == -1) {
115 perror (
"Skipping visualization package");
129 struct sembuf op = { 1, +1, 0 };
131 if (semop (t->
semid, &op, 1) == -1) {
133 g_error (
"visualization increment_client: %s\n", strerror (errno));
149 dest->
size = htons (res);
159 struct shmid_ds shm_desc;
162 if (shmctl (t->
shmid, IPC_STAT, &shm_desc) == -1) {
163 g_error (
"Checking SHM attachments failed: %s\n", strerror (errno));
165 if (shm_desc.shm_nattch == 1) {
169 if (shm_desc.shm_nattch != 2) {
170 g_error (
"Unbelievable # of SHM attachments: %lu\n",
171 (
unsigned long) shm_desc.shm_nattch);
174 if (!decrement_server (t)) {
186 increment_client (t);