From: Andre Noll Date: Tue, 3 Feb 2009 20:41:08 +0000 (+0100) Subject: Call shm(destroy) on the mmd shared memory area right after creating it. X-Git-Tag: v0.3.4~71 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=df51fc92275195f2cbcf95fff2cb2b0fb21433f4 Call shm(destroy) on the mmd shared memory area right after creating it. 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. --- diff --git a/server.c b/server.c index 5823cb28..9187b63f 100644 --- a/server.c +++ b/server.c @@ -115,7 +115,6 @@ int mmd_mutex; /** 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. */ @@ -162,16 +161,16 @@ static void init_colors_or_die(void) 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) @@ -303,8 +302,6 @@ genocide: kill(0, SIGTERM); mutex_destroy(mmd_mutex); shm_detach(mmd); - shm_destroy(mmd_shm_id); - exit(EXIT_FAILURE); } }