changeset 2030:fb287a0612fe

make sure fd is referenced file_data_disconnect_sidecar_file may free a fd with zero references we have to ref it if we want to use it later
author Vladimir Nadvornik <nadvornik@suse.cz>
date Fri, 10 Aug 2012 21:20:07 +0200
parents d11d79da26cf
children 391e0ca035ca
files src/filedata.c
diffstat 1 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/filedata.c	Thu Aug 09 17:32:36 2012 +0200
+++ b/src/filedata.c	Fri Aug 10 21:20:07 2012 +0200
@@ -185,8 +185,12 @@
 			{
 			fd->size = 0;
 			fd->date = 0;
+			file_data_ref(sfd);
 			file_data_disconnect_sidecar_file(fd, sfd);
 			ret = TRUE;
+			file_data_increment_version(sfd);
+			file_data_send_notification(sfd, NOTIFY_REREAD);
+			file_data_unref(sfd);
 			continue;
 			}
 
@@ -217,6 +221,7 @@
 		/* file_data_disconnect_sidecar_file might delete the file,
 		   we have to keep the reference to prevent this */
 		sidecars = filelist_copy(fd->sidecar_files);
+		file_data_ref(fd);
 		work = sidecars;
 		while (work)
 			{
@@ -228,7 +233,9 @@
 		file_data_check_sidecars(sidecars); /* this will group the sidecars back together */
 		/* now we can release the sidecars */
 		filelist_free(sidecars);
+		file_data_increment_version(fd);
 		file_data_send_notification(fd, NOTIFY_REREAD);
+		file_data_unref(fd);
 		}
 	else
 		{