Allow dumping the shared memory data with dgamelaunch -D

git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@567 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
Pasi Kallinen 2010-05-13 10:19:45 +00:00
parent 3f50414639
commit ef9018dff1
1 changed files with 45 additions and 1 deletions

View File

@ -589,6 +589,41 @@ shm_init(struct dg_shm **shm_dg_data, struct dg_shm_game **shm_dg_game)
#endif /* USE_SHMEM */
}
#ifdef USE_SHMEM
void
shm_dump()
{
struct dg_shm *shm_dg_data = NULL;
struct dg_shm_game *shm_dg_game = NULL;
int di, unused = -1;
shm_init(&shm_dg_data, &shm_dg_game);
shm_sem_wait(shm_dg_data);
for (di = 0; di < shm_dg_data->max_n_games; di++) {
if (shm_dg_game[di].in_use) {
if (unused != -1) {
if (unused != di-1)
fprintf(stderr, "%i-%i:\tunused\n", unused, di-1);
else
fprintf(stderr, "%i:\tunused\n", unused);
unused = -1;
}
fprintf(stderr, "%i:\t\"%s\"\twatchers:%li\n", di, shm_dg_game[di].ttyrec_fn, shm_dg_game[di].nwatchers);
} else {
if (unused == -1) unused = di;
}
}
if (unused != -1) {
if (unused != di-1)
fprintf(stderr, "%i-%i:\tunused\n", unused, di-1);
else
fprintf(stderr, "%i:\tunused\n", unused);
unused = -1;
}
shm_sem_post(shm_dg_data);
shmdt(shm_dg_data);
}
#endif
void
inprogressmenu (int gameid)
{
@ -2278,7 +2313,7 @@ main (int argc, char** argv)
__progname = basename(strdup(argv[0]));
while ((c = getopt(argc, argv, "qh:pf:aeW:S")) != -1)
while ((c = getopt(argc, argv, "qh:pf:aeW:SD")) != -1)
{
switch (c)
{
@ -2320,6 +2355,15 @@ main (int argc, char** argv)
}
break;
case 'D': /* dump the shared memory block data */
#ifdef USE_SHMEM
shm_dump();
#else
if (!silent) fprintf(stderr, "warning: dgamelaunch was compiled without shmem.\n");
#endif
graceful_exit(0);
break;
default:
break; /*ignore */
}