From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2128 invoked by alias); 9 Sep 2003 23:43:31 -0000 Mailing-List: contact guile-gtk-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: guile-gtk-owner@sources.redhat.com Received: (qmail 2119 invoked from network); 9 Sep 2003 23:43:29 -0000 Received: from unknown (HELO snoopy.pacific.net.au) (61.8.0.36) by sources.redhat.com with SMTP; 9 Sep 2003 23:43:29 -0000 Received: from mongrel.pacific.net.au (mongrel.pacific.net.au [61.8.0.107]) by snoopy.pacific.net.au (8.12.3/8.12.3/Debian-6.4) with ESMTP id h89NhSBt026760 for ; Wed, 10 Sep 2003 09:43:28 +1000 Received: from localhost (ppp111.dyn228.pacific.net.au [203.143.228.111]) by mongrel.pacific.net.au (8.12.3/8.12.3/Debian-6.4) with ESMTP id h89Nfm3G021024 for ; Wed, 10 Sep 2003 09:41:49 +1000 Received: from gg by localhost with local (Exim 3.35 #1 (Debian)) id 19ws8m-0000m3-00; Wed, 10 Sep 2003 09:43:20 +1000 To: guile-gtk@sources.redhat.com Subject: don't scm_must_malloc temp memory From: Kevin Ryde Mail-Copies-To: never Date: Tue, 09 Sep 2003 23:43:00 -0000 Message-ID: <8765k1sf3c.fsf@zip.com.au> User-Agent: Gnus/5.1003 (Gnus v5.10.3) Emacs/21.3 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-SW-Source: 2003-q3/txt/msg00071.txt.bz2 --=-=-= Content-length: 567 With this change gdk-mbstowcs actually works. * gdk-support.c (gdk_property_change_list, gdk_property_change_vector, gdk_mbstowcs_interp, gdk_colormap_alloc_colors_interp): Use g_new rather than scm_must_malloc for temporary memory, since it's not subject to gc the way scm_must_malloc is meant to express, and negatives don't work with scm_done_malloc in Guile 1.6.4. gdk_property_change_list and gdk_property_change_vector were in fact missing scm_done_malloc, making scm_mallocated increase indefinitely. --=-=-= Content-Disposition: attachment; filename=gdk-support.c.must-malloc.diff Content-length: 4432 --- gdk-support.c.~1.44.~ 1970-01-01 10:00:01.000000000 +1000 +++ gdk-support.c 2003-09-09 15:58:53.000000000 +1000 @@ -66,34 +66,31 @@ if (nelements < 1) BAD_DATA (data); switch (format) { case 8: - dc = duchar = (guchar *) scm_must_malloc (nelements * sizeof *duchar, - "temporary data"); + dc = duchar = g_new (guchar, nelements); for (; SCM_CONSP (data); data = SCM_CDR (data)) *dc++ = scm_num2long (SCM_CAR (data), SCM_ARG6, FUNCNAME); if (!SCM_NULLP (data)) BAD_DATA (data); gdk_property_change (window, property, type, format, mode, duchar, nelements); - free (duchar); + g_free (duchar); break; case 16: - ds = dushort = (gushort *) scm_must_malloc (nelements * sizeof *dushort, - "temporary data"); + ds = dushort = g_new (gushort, nelements); for (; SCM_CONSP (data); data = SCM_CDR (data)) *ds++ = scm_num2long (SCM_CAR (data), SCM_ARG6, FUNCNAME); if (!SCM_NULLP (data)) BAD_DATA (data); gdk_property_change (window, property, type, format, mode, (guchar *) dushort, nelements); - free (dushort); + g_free (dushort); break; case 32: - dl = dulong = (gulong *) scm_must_malloc (nelements * sizeof *dulong, - "temporary data"); + dl = dulong = g_new (gulong, nelements); for (; SCM_CONSP (data); data = SCM_CDR (data)) *dl++ = scm_num2long (SCM_CAR (data), SCM_ARG6, FUNCNAME); if (!SCM_NULLP (data)) BAD_DATA (data); gdk_property_change (window, property, type, format, mode, (guchar *) dulong, nelements); - free (dulong); + g_free (dulong); break; default: BAD_FORMAT (format); @@ -112,34 +109,31 @@ SCM *velts = SCM_VELTS (data); switch (format) { case 8: - dc = duchar = (guchar *) scm_must_malloc (nelements * sizeof *duchar, - "temporary data"); + dc = duchar = g_new (guchar, nelements); for (i = 0; i < nelements; i++) *dc++ = scm_num2long (velts[i], SCM_ARG6, FUNCNAME); if (!SCM_NULLP (data)) BAD_DATA (data); gdk_property_change (window, property, type, format, mode, duchar, nelements); - free (duchar); + g_free (duchar); break; case 16: - ds = dushort = (gushort *) scm_must_malloc (nelements * sizeof *dushort, - "temporary data"); + ds = dushort = g_new (gushort, nelements); for (i = 0; i < nelements; i++) *ds++ = scm_num2long (velts[i], SCM_ARG6, FUNCNAME); if (!SCM_NULLP (data)) BAD_DATA (data); gdk_property_change (window, property, type, format, mode, (guchar *) dushort, nelements); - free (dushort); + g_free (dushort); break; case 32: - dl = dulong = (gulong *) scm_must_malloc (nelements * sizeof *dulong, - "temporary data"); + dl = dulong = g_new (gulong, nelements); for (i = 0; i < nelements; i++) *dl++ = scm_num2long (velts[i], SCM_ARG6, FUNCNAME); if (!SCM_NULLP (data)) BAD_DATA (data); gdk_property_change (window, property, type, format, mode, (guchar *) dulong, nelements); - free (dulong); + g_free (dulong); break; default: BAD_FORMAT (format); @@ -1038,8 +1032,7 @@ gint rv,i; GdkWChar *space; gint length = strlen (src); - size_t size = (length + 1) * sizeof (GdkWChar); - space = (GdkWChar *) scm_must_malloc (size, "temporary GdkWChar array"); + space = g_new (GdkWChar, length + 1); rv = gdk_mbstowcs (space, src, length + 1); if (rv < 0) { free (space); @@ -1049,8 +1042,7 @@ vector = scm_c_make_vector (i, SCM_UNSPECIFIED); for (i = 0; i < length && space[i]; i++) SCM_VECTOR_SET (vector, i, scm_long2num (space[i])); - free (space); - scm_done_malloc (-size); + g_free (space); return vector; } @@ -1359,10 +1351,8 @@ gboolean *success,*sp; SCM flist,flast; int i; - size_t size; cvec = sgtk_scm2cvec (colors, sgtk_color_copy, sizeof (GdkColor)); - size = cvec.count * sizeof (gboolean); - success = (gboolean *) scm_must_malloc (size, "temporary gboolean array"); + success = g_new (gboolean, cvec.count); failures = gdk_colormap_alloc_colors (colormap, (GdkColor *) cvec.vec, cvec.count, writable, best_match, success); @@ -1380,8 +1370,7 @@ sgtk_append_element (&flist, &flast, SCM_VELTS (colors)[i]); failures--; } - free (success); - scm_done_malloc (-size); + g_free (success); free (cvec.vec); return flist; } --=-=-=--