Evas cserve2: Fix client crashes when a file changed

Clients must ignore changed file entries as they are not valid
anymore. The server will also mark the entry as invalid in case
of file update.

@fix

(cherry picked from commit 320a9f18c5)
This commit is contained in:
Jean-Philippe Andre 2014-03-18 12:11:35 +09:00
parent cd21cf50d2
commit 5671816193
2 changed files with 6 additions and 1 deletions

View File

@ -1712,6 +1712,7 @@ _file_changed_cb(const char *path EINA_UNUSED, Eina_Bool deleted EINA_UNUSED, vo
if (fd) if (fd)
{ {
fd->changed = EINA_TRUE; fd->changed = EINA_TRUE;
fd->valid = EINA_FALSE;
_file_id_free(fd); _file_id_free(fd);
eina_hash_set(file_entries, &fd->id, NULL); eina_hash_set(file_entries, &fd->id, NULL);
} }

View File

@ -2735,7 +2735,9 @@ _shared_image_entry_file_data_find(Image_Entry *ie)
if (fe->server_file_id) if (fe->server_file_id)
{ {
if ((fdata = _shared_file_data_get_by_id(fe->server_file_id)) != NULL) if ((fdata = _shared_file_data_get_by_id(fe->server_file_id)) != NULL)
return fdata; if (!fdata->changed)
return fdata;
fe->server_file_id = 0;
} }
// Check hash // Check hash
@ -2757,6 +2759,7 @@ _shared_image_entry_file_data_find(Image_Entry *ie)
fd = &(_index.files.entries.filedata[k]); fd = &(_index.files.entries.filedata[k]);
if (!fd->id) break; if (!fd->id) break;
if (!fd->refcount) continue; if (!fd->refcount) continue;
if (fd->changed) continue;
key = _shared_string_safe_get(fd->key); key = _shared_string_safe_get(fd->key);
file = _shared_string_safe_get(fd->path); file = _shared_string_safe_get(fd->path);
@ -3106,6 +3109,7 @@ _shared_image_entry_image_data_find(Image_Entry *ie)
continue; continue;
} }
if (fd->changed || !fd->valid) continue;
key = _shared_string_safe_get(fd->key); key = _shared_string_safe_get(fd->key);
file = _shared_string_safe_get(fd->path); file = _shared_string_safe_get(fd->path);
if (!file) if (!file)