aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2016-11-28 08:45:27 -0500
committerDrew DeVault <sir@cmpwn.com>2016-11-28 08:45:27 -0500
commitcd5694fdb5bc9beb575902ea57d037833ad8e85c (patch)
tree3f0c37edc772c792fe60dec0182acbeee086b8a0
parentde79fee77751dbf93c5d1767f1aecf3e529d6367 (diff)
downloadsway-cd5694fdb5bc9beb575902ea57d037833ad8e85c.tar.xz
Fix memory leaks in swaybar
-rw-r--r--wayland/buffers.c3
-rw-r--r--wayland/pango.c7
2 files changed, 7 insertions, 3 deletions
diff --git a/wayland/buffers.c b/wayland/buffers.c
index 227d6d2c..23bed555 100644
--- a/wayland/buffers.c
+++ b/wayland/buffers.c
@@ -94,6 +94,9 @@ static void destroy_buffer(struct buffer *buffer) {
if (buffer->surface) {
cairo_surface_destroy(buffer->surface);
}
+ if (buffer->pango) {
+ g_object_unref(buffer->pango);
+ }
memset(buffer, 0, sizeof(struct buffer));
}
diff --git a/wayland/pango.c b/wayland/pango.c
index 5781541b..702ab15c 100644
--- a/wayland/pango.c
+++ b/wayland/pango.c
@@ -10,12 +10,14 @@
PangoLayout *get_pango_layout(cairo_t *cairo, const char *font, const char *text,
int32_t scale, bool markup) {
PangoLayout *layout = pango_cairo_create_layout(cairo);
- PangoAttrList *attrs = pango_attr_list_new();
- char *buf = malloc(2048);
+ PangoAttrList *attrs;
if (markup) {
+ char *buf;
pango_parse_markup(text, -1, 0, &attrs, &buf, NULL, NULL);
pango_layout_set_markup(layout, buf, -1);
+ free(buf);
} else {
+ attrs = pango_attr_list_new();
pango_layout_set_text(layout, text, -1);
}
pango_attr_list_insert(attrs, pango_attr_scale_new(scale));
@@ -25,7 +27,6 @@ PangoLayout *get_pango_layout(cairo_t *cairo, const char *font, const char *text
pango_layout_set_attributes(layout, attrs);
pango_attr_list_unref(attrs);
pango_font_description_free(desc);
- free(buf);
return layout;
}