From a0bc78a6ddf8245a5df6c0ad504793a6f4410eb8 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 21 Apr 2010 01:31:23 +0000 Subject: [PATCH] (trunk daemon) #3158 "Possible crash when using inotify" -- fixed in trunk for 2.00 --- daemon/watch.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/daemon/watch.c b/daemon/watch.c index 5311c24dd..e53ddc1ef 100644 --- a/daemon/watch.c +++ b/daemon/watch.c @@ -74,12 +74,20 @@ watchdir_new_impl( dtr_watchdir * w ) int i; DIR * odir; w->inotify_fd = inotify_init( ); - tr_inf( "Using inotify to watch directory \"%s\"", w->dir ); - i = inotify_add_watch( w->inotify_fd, w->dir, DTR_INOTIFY_MASK ); + + if( w->inotify_fd < 0 ) + { + i = -1; + } + else + { + tr_inf( "Using inotify to watch directory \"%s\"", w->dir ); + i = inotify_add_watch( w->inotify_fd, w->dir, DTR_INOTIFY_MASK ); + } if( i < 0 ) { - tr_err( "Unable to watch \"%s\": %s", w->dir, strerror (errno) ); + tr_err( "Unable to watch \"%s\": %s", w->dir, strerror( errno ) ); } else if(( odir = opendir( w->dir ))) { @@ -105,8 +113,12 @@ watchdir_new_impl( dtr_watchdir * w ) static void watchdir_free_impl( dtr_watchdir * w ) { - inotify_rm_watch( w->inotify_fd, DTR_INOTIFY_MASK ); - close( w->inotify_fd ); + if( w->inotify_fd >= 0 ) + { + inotify_rm_watch( w->inotify_fd, DTR_INOTIFY_MASK ); + + close( w->inotify_fd ); + } } static void watchdir_update_impl( dtr_watchdir * w )