diff --git a/src/bin/evas/evas_cserve2_cache.c b/src/bin/evas/evas_cserve2_cache.c index d485576c0f..bbb6ce2886 100644 --- a/src/bin/evas/evas_cserve2_cache.c +++ b/src/bin/evas/evas_cserve2_cache.c @@ -429,6 +429,8 @@ _load_request_build(Image_Data *i, int *bufsize) // opening shm for this file i->shm = cserve2_shm_request(i->file->w * i->file->h * 4); + if (!i->shm) + return NULL; shmpath = cserve2_shm_name_get(i->shm); @@ -2012,6 +2014,7 @@ cserve2_cache_file_open(Client *client, unsigned int client_file_id, const char ERR("file \"%s\" is in file_ids hash but not in entries hash.", buf); cserve2_client_error_send(client, rid, CSERVE2_INVALID_CACHE); + // FIXME: Maybe we should remove the entry from file_ids then? return -1; } ref = _entry_reference_add((Entry *)entry, client, client_file_id); diff --git a/src/bin/evas/evas_cserve2_shm.c b/src/bin/evas/evas_cserve2_shm.c index 0c31e17e34..ffaa88917b 100644 --- a/src/bin/evas/evas_cserve2_shm.c +++ b/src/bin/evas/evas_cserve2_shm.c @@ -67,6 +67,14 @@ cserve2_shm_request(size_t size) return NULL; } + shm = calloc(1, sizeof(Shm_Handle)); + if (!shm) + { + ERR("Failed to allocate shared memory handler."); + free(map); + return NULL; + } + do { snprintf(shmname, sizeof(shmname), "/evas-shm-img-%x-%d", (int)getuid(), id++); fd = shm_open(shmname, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); @@ -74,6 +82,7 @@ cserve2_shm_request(size_t size) { ERR("Failed to create shared memory object '%s': %m", shmname); free(map); + free(shm); return NULL; } } while (fd == -1); @@ -85,6 +94,7 @@ cserve2_shm_request(size_t size) ERR("Failed to set size of shared file: %m"); close(fd); free(map); + free(shm); return NULL; } close(fd); @@ -92,15 +102,6 @@ cserve2_shm_request(size_t size) map->name = eina_stringshare_add(shmname); map->length = map_size; - shm = calloc(1, sizeof(Shm_Handle)); - if (!shm) - { - ERR("Failed to allocate shared memory handler."); - eina_stringshare_del(map->name); - free(map); - return NULL; - } - map->segments = eina_inlist_append(map->segments, EINA_INLIST_GET(shm)); shm->mapping = map; shm->map_offset = 0; diff --git a/src/lib/evas/cserve2/evas_cs2_client.c b/src/lib/evas/cserve2/evas_cs2_client.c index b6aeba691d..404b5224f3 100644 --- a/src/lib/evas/cserve2/evas_cs2_client.c +++ b/src/lib/evas/cserve2/evas_cs2_client.c @@ -634,6 +634,7 @@ _image_open_server_send(Image_Entry *ie, const char *file, const char *key, Evas { ERR("Couldn't send message to server."); free(buf); + free(fentry); return 0; }