summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
1b11441)
It seems that g_object_set_property adds to the reference count of
object properties, so we must release our original reference when
deserializing.
Add finalizers for Engine.Texture and Engine.Palette to release
the palette memory.
%alltop{
/*
* upkg: tool for manipulating Unreal Tournament packages.
%alltop{
/*
* upkg: tool for manipulating Unreal Tournament packages.
- * Copyright © 2011 Nick Bowler
+ * Copyright © 2011, 2020 Nick Bowler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
class Engine:Palette from U:Object (dynamic)
{
public unsigned entries = 0;
class Engine:Palette from U:Object (dynamic)
{
public unsigned entries = 0;
- public engine_palette_rgba *rgba = NULL;
+ public engine_palette_rgba *rgba = NULL destroywith free;
override (U:Object) int deserialize(U:Object *uo)
{
override (U:Object) int deserialize(U:Object *uo)
{
%alltop{
/*
* upkg: tool for manipulating Unreal Tournament packages.
%alltop{
/*
* upkg: tool for manipulating Unreal Tournament packages.
- * Copyright © 2009-2011 Nick Bowler
+ * Copyright © 2009-2012, 2020 Nick Bowler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- private Engine:Palette *Palette;
- private Engine:Texture *DetailTexture;
+ private Engine:Palette *Palette = NULL destroywith g_object_unref;
+ private Engine:Texture *DetailTexture = NULL destroywith g_object_unref;
private struct engine_texture_data **mipmap_data;
private unsigned char mipmap_count;
private struct engine_texture_data **mipmap_data;
private unsigned char mipmap_count;
/*
* upkg: tool for manipulating Unreal Tournament packages.
/*
* upkg: tool for manipulating Unreal Tournament packages.
- * Copyright © 2009-2012, 2015 Nick Bowler
+ * Copyright © 2009-2012, 2015, 2020 Nick Bowler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
if (rc != 0)
return 0;
g_object_set_property(G_OBJECT(uo), head->prop_name, &val);
if (rc != 0)
return 0;
g_object_set_property(G_OBJECT(uo), head->prop_name, &val);
+
+ /*
+ * g_object_set_property increments refcount,
+ * release our reference.
+ */
+ g_object_unref(g_value_get_object(&val));
break;
case PROPERTY_FLOAT:
if (head->size != 4 || priv->nbuf-len < head->size)
break;
case PROPERTY_FLOAT:
if (head->size != 4 || priv->nbuf-len < head->size)