24 #ifdef _SEM_SEMUN_UNDEFINED
28 unsigned short *array;
29 struct seminfo *__buf;
36 struct shmid_ds shm_desc;
53 buffer = shmat (shmid, NULL, 0);
54 if (buffer == (
void*)-1) {
59 shmctl (shmid, IPC_STAT, &shm_desc);
63 semid = semget (IPC_PRIVATE, 2, S_IRWXU + S_IRWXG + S_IRWXO);
73 semctl (semid, 0, SETVAL, semopts);
75 semctl (semid, 1, SETVAL, semopts);
88 xmms_log_info (
"Visualization client %d initialised using Unix SHM",
id);
95 semctl (t->
semid, 0, IPC_RMID, 0);
105 struct sembuf op = { 0, -1, IPC_NOWAIT };
107 while (semop (t->
semid, &op, 1) == -1) {
114 perror (
"Skipping visualization package");
128 struct sembuf op = { 1, +1, 0 };
130 if (semop (t->
semid, &op, 1) == -1) {
132 g_error (
"visualization increment_client: %s\n", strerror (errno));
148 dest->
size = htons (res);
158 struct shmid_ds shm_desc;
161 if (shmctl (t->
shmid, IPC_STAT, &shm_desc) == -1) {
162 g_error (
"Checking SHM attachments failed: %s\n", strerror (errno));
164 if (shm_desc.shm_nattch == 1) {
168 if (shm_desc.shm_nattch != 2) {
169 g_error (
"Unbelievable # of SHM attachments: %lu\n",
170 (
unsigned long) shm_desc.shm_nattch);
173 if (!decrement_server (t)) {
185 increment_client (t);