Skip to content

Commit 65ae9b0

Browse files
committed
Fix bad free in default_video_palette_destroy()
1 parent 7877b45 commit 65ae9b0

File tree

4 files changed

+10
-7
lines changed

4 files changed

+10
-7
lines changed

kos/include/libvideo/gfx/anim.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ struct video_anim_frame {
5858
/* Animation-specific frame data goes here... */
5959
};
6060

61-
#define video_anim_frame_fini(self) ((self)->vaf_fini)(self)
61+
#define video_anim_frame_fini(self) (*(self)->vaf_fini)(self)
6262

6363

6464
struct video_anim_ops {

kos/src/apps/showpic/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ int main(int argc, char *argv[]) {
653653
* - dst format caching: ~97% spent sleeping (=> x30 pixel output possible) */
654654
#if 0
655655
anim = video_anim_cached(anim, NULL, NULL);
656-
#elif 1
656+
#elif 0
657657
{
658658
struct video_buffer_format format;
659659
video_buffer_getformat(bscreen, &format);

kos/src/libvideo/gfx/anim.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,9 +334,9 @@ cached_anim_nextframe(struct video_anim const *__restrict self,
334334
me->ca_bbuf = NULL;
335335
me->ca_base = NULL;
336336
shared_lock_release(&me->ca_lock);
337-
video_anim_decref(old_base);
338337
video_anim_frame_fini(old_bbuf);
339338
free(old_bbuf);
339+
video_anim_decref(old_base);
340340
next_id = 0;
341341
goto return_next_cached_frame;
342342
}
@@ -368,7 +368,8 @@ cached_anim_nextframe(struct video_anim const *__restrict self,
368368
assert(cframe == &me->ca_framev[next_id]);
369369
unlock_and_return_frame:
370370
assert(next_id < me->ca_framec);
371-
assertf(atomic_read(&frame->vaf_frame->vb_refcnt) >= 2, "1 by the cache, and one by the caller");
371+
assertf(atomic_read(&frame->vaf_frame->vb_refcnt) >= 2,
372+
"1 by the cache, and one by the caller");
372373
atomic_dec(&frame->vaf_frame->vb_refcnt);
373374
video_buffer_incref(cframe->cf_frame);
374375
cframe = &me->ca_framev[next_id];

kos/src/libvideo/gfx/codec/palette.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,8 @@ libvideo_palette_optimize(/*inherited(always)*/ REF struct video_palette *__rest
425425

426426
PRIVATE NONNULL((1)) void
427427
NOTHROW(CC default_video_palette_destroy)(struct video_palette *__restrict self) {
428-
free(self);
428+
struct video_palette_object *me = video_palette_asobject(self);
429+
free(me);
429430
}
430431

431432

@@ -453,8 +454,9 @@ libvideo_generic_palette_create(struct video_domain const *__restrict domain,
453454
(count * sizeof(struct video_palette_cache)));
454455
if unlikely(!result)
455456
goto err;
456-
result->vp_color2pixel = video_palette_get_special_color2pixel(count)
457-
?: &linear_video_palette_color2pixel;
457+
result->vp_color2pixel = video_palette_get_special_color2pixel(count);
458+
if (result->vp_color2pixel == NULL)
459+
result->vp_color2pixel = &linear_video_palette_color2pixel;
458460
result->vp_ops = _generic_palette_ops();
459461
result->vp_refcnt = 1;
460462
result->vp_cnt = count;

0 commit comments

Comments
 (0)