fs-back: terminate thread when domain gets destroyed
by periodically checking that the frontend xenstore nodes still exist
Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
diff -r 86e64b684fb2 tools/fs-back/fs-backend.c
--- a/tools/fs-back/fs-backend.c Wed Mar 05 11:10:29 2008 +0000
+++ b/tools/fs-back/fs-backend.c Tue Mar 11 13:47:40 2008 +0000
@@ -49,6 +49,7 @@ static void handle_aio_events(struct mou
struct 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);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|