fs-back: terminate thread when domain gets destroyed
PATCH 1/1 fs-back: terminate thread when domain gets destroyed
fs-back: terminate thread when domain gets destroyed
by periodically checking that the frontend xenstore nodes still exist
Signed-off-by Samuel Thibault <[email protected]>
tools/fs-back/fs-backend.c +16 -3
@@ -49,6 +49,7 @@ static void handle_aio_events(struct moustruct aiocb evtchn_cb;const struct aiocb * cb_list[mount->nr_entries];int request_ids[mount->nr_entries]; +struct timespec timeout = { .tv_sec =1 , .tv_nsec =0 };/* Prepare the AIO control block for evtchn */ fd =xc_evtchn_fd (mount->evth);
@@ -76,9 +77,11 @@ wait_again:/* Block till an AIO requset finishes, or we get an event */ while (1 ) { -int ret =aio_suspend (cb_list, count,NULL ); +int ret =aio_suspend (cb_list, count, &timeout);if (!ret)break ; +if (errno ==EAGAIN ) +return ;assert (errno ==EINTR ); }for (i=0 ; i<count; i++)
@@ -127,6 +130,9 @@ void* handle_mount(void *data) {int more, notify;struct mount *mount = (struct mount *)data; +char *state; +char node[1024 ]; +sprintf (node,"%s/state" , mount->frontend);printf ("Starting a thread for mount: %d\n" , mount->mount_id);allocate_request_array (mount);
@@ -172,14 +178,21 @@ moretodo: nr_consumed++; } -printf ("Backend consumed: %d requests\n" , nr_consumed); +if (nr_consumed) +printf ("Backend consumed: %d requests\n" , nr_consumed);RING_FINAL_CHECK_FOR_REQUESTS (&mount->ring, more);if (more) goto moretodo;RING_PUSH_RESPONSES_AND_CHECK_NOTIFY (&mount->ring, notify); -printf ("Pushed responces and notify=%d\n" , notify); +//printf("Pushed responces and notify=%d\n", notify); if (notify)xc_evtchn_notify (mount->evth, mount->local_evtchn); + + state =xs_read (xsh,XBT_NULL , node,NULL ); +if (!state) +/* domain destroyed */ +break ; +free (state); }printf ("Destroying thread for mount: %d\n" , mount->mount_id);
Quoted 2 lines · Samuel Thibault, le Tue 11 Mar 2008 13:49:50 +0000, a écrit :
fs-back: terminate thread when domain gets destroyed
by periodically checking that the frontend xenstore nodes still exist
Hum, actually no, please do not apply it: it looks like it makes the aio implementation in glibc unstable...
Samuel