rollback changes in bitmap_destroy

This commit is contained in:
lixianjing 2020-10-19 02:06:42 -07:00
parent 10abd3186e
commit 0a22401706
3 changed files with 29 additions and 9 deletions

View File

@ -46,18 +46,18 @@ ret_t bitmap_destroy(bitmap_t* bitmap) {
}
if (bitmap->should_free_data) {
if (bitmap->buffer != NULL) {
graphic_buffer_destroy(bitmap->buffer);
}
if (bitmap->gif_delays != NULL) {
TKMEM_FREE(bitmap->gif_delays);
bitmap->gif_delays = NULL;
}
TKMEM_FREE(bitmap->data_free_ptr);
}
if (bitmap->buffer != NULL) {
graphic_buffer_destroy(bitmap->buffer);
}
if (bitmap->gif_delays != NULL) {
TKMEM_FREE(bitmap->gif_delays);
bitmap->gif_delays = NULL;
}
if (bitmap->should_free_handle) {
memset(bitmap, 0x00, sizeof(bitmap_t));
TKMEM_FREE(bitmap);
@ -462,6 +462,7 @@ ret_t bitmap_init(bitmap_t* bitmap, uint32_t w, uint32_t h, bitmap_format_t form
bitmap_alloc_data(bitmap);
} else {
bitmap->buffer = GRAPHIC_BUFFER_CREATE_WITH_DATA(data, w, h, format);
bitmap->should_free_handle = TRUE;
}
return bitmap->buffer != NULL ? RET_OK : RET_OOM;

View File

@ -17,6 +17,23 @@ TEST(ImageManager, basic) {
ASSERT_EQ(image_manager_unload_unused(image_manager(), 0), RET_OK);
}
TEST(ImageManager, allloc) {
bitmap_t* bmp = bitmap_create();
ASSERT_EQ(image_manager_get_bitmap(image_manager(), "checked", bmp), RET_OK);
bitmap_destroy(bmp);
bmp = bitmap_create();
ASSERT_EQ(image_manager_lookup(image_manager(), "checked", bmp), RET_OK);
ASSERT_EQ(image_manager_get_bitmap(image_manager(), "not found", bmp), RET_NOT_FOUND);
bitmap_destroy(bmp);
bmp = bitmap_create();
ASSERT_EQ(image_manager_lookup(image_manager(), "unchecked", bmp), RET_NOT_FOUND);
bitmap_destroy(bmp);
ASSERT_EQ(image_manager_unload_unused(image_manager(), 0), RET_OK);
}
TEST(ImageManager, unload) {
bitmap_t bmp;
memset(&bmp, 0x00, sizeof(bmp));

View File

@ -15,6 +15,8 @@ static void init_image(bitmap_t* fb, bitmap_t* img, bitmap_format_t format) {
bitmap_init(fb, FB_W, FB_H, format, fb_buff);
bitmap_init(img, IMG_W, IMG_H, format, img_buff);
fb->should_free_data = TRUE;
img->should_free_data = TRUE;
memset(s_fb_buff, 0x00, sizeof(s_fb_buff));
memset(s_img_buff, 0xfe, sizeof(s_img_buff));