make sure fd is referenced
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 10 Aug 2012 19:20:07 +0000 (21:20 +0200)
committerVladimir Nadvornik <nadvornik@suse.cz>
Fri, 10 Aug 2012 19:20:07 +0000 (21:20 +0200)
file_data_disconnect_sidecar_file may free a fd with zero references
we have to ref it if we want to use it later

src/filedata.c

index f0dd08f..9cc9424 100644 (file)
@@ -185,8 +185,12 @@ static gboolean file_data_check_changed_files_recursive(FileData *fd, struct sta
                        {
                        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 @@ gboolean file_data_check_changed_files(FileData *fd)
                /* 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 @@ gboolean file_data_check_changed_files(FileData *fd)
                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
                {