diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2013-10-01 11:59:40 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2013-10-28 11:09:53 +0900 |
commit | 16791ff5972fd79c7826f6c20714bf1bfa41934c (patch) | |
tree | de32692b35b0b0399642ba63e0021068ef2fb61f | |
parent | 5becf33212525eab27edd93b3ca4726d5d925efe (diff) | |
download | efl-16791ff5972fd79c7826f6c20714bf1bfa41934c.tar.gz |
evas/cserve2: Fix reload of image without load_opts
Problem: Images opened without load_opts are reopened
multiple times.
Solution: Use empty load opts when looking for the key.
-rw-r--r-- | src/bin/evas/evas_cserve2.h | 2 | ||||
-rw-r--r-- | src/bin/evas/evas_cserve2_cache.c | 15 |
2 files changed, 9 insertions, 8 deletions
diff --git a/src/bin/evas/evas_cserve2.h b/src/bin/evas/evas_cserve2.h index 158eefda3d..a90dc079c7 100644 --- a/src/bin/evas/evas_cserve2.h +++ b/src/bin/evas/evas_cserve2.h @@ -320,7 +320,7 @@ void cserve2_cache_client_new(Client *client); void cserve2_cache_client_del(Client *client); int cserve2_cache_file_open(Client *client, unsigned int client_file_id, const char *path, const char *key, unsigned int rid, Evas_Image_Load_Opts *lo); void cserve2_cache_file_close(Client *client, unsigned int client_file_id); -int cserve2_cache_image_entry_create(Client *client, int rid, unsigned int client_file_id, unsigned int image_id, Evas_Image_Load_Opts *opts); +int cserve2_cache_image_entry_create(Client *client, int rid, unsigned int client_file_id, unsigned int image_id, const Evas_Image_Load_Opts *opts); void cserve2_rgba_image_scale_do(void *src_data, int src_full_w, int src_full_h, void *dst_data, int src_x, int src_y, int src_w, int src_h, int dst_x, int dst_y, int dst_w, int dst_h, int alpha, int smooth); void cserve2_cache_image_load(Client *client, unsigned int client_image_id, unsigned int rid); void cserve2_cache_image_preload(Client *client, unsigned int client_image_id, unsigned int rid); diff --git a/src/bin/evas/evas_cserve2_cache.c b/src/bin/evas/evas_cserve2_cache.c index 2a358f7ef9..8b4e5659ca 100644 --- a/src/bin/evas/evas_cserve2_cache.c +++ b/src/bin/evas/evas_cserve2_cache.c @@ -932,10 +932,8 @@ static void _image_key_set(unsigned int file_id, const Evas_Image_Load_Opts *opts, char *buf, int size) { - const char empty[sizeof(Evas_Image_Load_Opts)] = {0}; - if (!opts) - opts = (Evas_Image_Load_Opts *) ∅ + opts = &empty_lo; snprintf(buf, size, "%u:%0.3f:%dx%d:%d:%d,%d+%dx%d:!([%d,%d:%dx%d]-[%dx%d:%d]):%d:%d", @@ -950,7 +948,7 @@ _image_key_set(unsigned int file_id, const Evas_Image_Load_Opts *opts, } static unsigned int -_image_opts_id_get(unsigned int file_id, Evas_Image_Load_Opts *opts, +_image_opts_id_get(unsigned int file_id, const Evas_Image_Load_Opts *opts, char *buf, int size) { uintptr_t image_id; @@ -1580,7 +1578,7 @@ cserve2_cache_client_del(Client *client) static Image_Entry * _image_entry_new(Client *client, int rid, unsigned int client_file_id, unsigned int client_image_id, - Evas_Image_Load_Opts *opts, char *buf, size_t buf_size) + const Evas_Image_Load_Opts *opts, char *buf, size_t buf_size) { Reference *ref, *oldref; Image_Entry *ientry; @@ -2823,7 +2821,7 @@ int cserve2_cache_image_entry_create(Client *client, int rid, unsigned int client_file_id, unsigned int client_image_id, - Evas_Image_Load_Opts *opts) + const Evas_Image_Load_Opts *opts) { Image_Data *idata; Image_Entry *ientry; @@ -2832,9 +2830,12 @@ cserve2_cache_image_entry_create(Client *client, int rid, unsigned int image_id = 0; char buf[4096]; + if (!opts) + opts = &empty_lo; + // search whether the image is already loaded by another client ref = eina_hash_find(client->files.referencing, &client_file_id); - if (ref && opts) + if (ref) image_id = _image_opts_id_get(ref->entry->id, opts, buf, sizeof(buf)); if (image_id) |