It will only be destroyed when the last reference is gone, which
is when para_server exits. This allows to get rid of a global
variable. Moreover, the shared memory area will be destroyed even
in case para_server crashes.
/** The file containing user information (public key, permissions). */
static char *user_list_file = NULL;
-static int mmd_shm_id;
/** The task responsible for server command handling. */
static void init_ipc_or_die(void)
{
void *shm;
- int ret = shm_new(sizeof(struct misc_meta_data));
+ int shmid, ret = shm_new(sizeof(struct misc_meta_data));
if (ret < 0)
goto err_out;
-
- ret = shm_attach(ret, ATTACH_RW, &shm);
+ shmid = ret;
+ ret = shm_attach(shmid, ATTACH_RW, &shm);
+ shm_destroy(shmid);
if (ret < 0)
goto err_out;
mmd = shm;
- mmd_shm_id = ret;
ret = mutex_new();
if (ret < 0)
kill(0, SIGTERM);
mutex_destroy(mmd_mutex);
shm_detach(mmd);
- shm_destroy(mmd_shm_id);
-
exit(EXIT_FAILURE);
}
}