After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 369666 - Checked g_free calls
Checked g_free calls
Status: RESOLVED FIXED
Product: gtk+
Classification: Platform
Component: Widget: Other
2.10.x
Other All
: Normal normal
: ---
Assigned To: gtk-bugs
gtk-bugs
Depends on:
Blocks:
 
 
Reported: 2006-11-02 21:43 UTC by Morten Welinder
Modified: 2007-03-09 22:01 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Patch to remove pointless NULL checks (34.82 KB, patch)
2007-03-08 09:32 UTC, Djihed Afifi
none Details | Review

Description Morten Welinder 2006-11-02 21:43:20 UTC
g_free accepts NULL, so all these checks are pointless unless they are
extremely performance critical.

Checked g_free at modules/engines/pixbuf/pixbuf-render.c:491
Checked g_free at modules/engines/pixbuf/pixbuf-rc-style.c:379
Checked g_free at modules/engines/pixbuf/pixbuf-rc-style.c:626
Checked g_free at modules/printbackends/cups/gtkprintbackendcups.c:616
Checked g_free at modules/input/gtkimcontextxim.c:1163
Checked g_free at gtk/gtksettings.c:1569
Checked g_free at gtk/gtkicontheme.c:996
Checked g_free at gtk/gtkicontheme.c:998
Checked g_free at gtk/gtkicontheme.c:2404
Checked g_free at gtk/gtkicontheme.c:2407
Checked g_free at gtk/gtkicontheme.c:2530
Checked g_free at gtk/gtktreedatalist.c:235
Checked g_free at gtk/gtkprogress.c:281
Checked g_free at gtk/gtkiconview.c:6997
Checked g_free at gtk/gtkentry.c:3256
Checked g_free at gtk/gtkfilechooserentry.c:852
Checked g_free at gtk/gtktextlayout.c:541
Checked g_free at gtk/gtktextlayout.c:1091
Checked g_free at gtk/gtktreemodelfilter.c:374
Checked g_free at gtk/gtkcurve.c:354
Checked g_free at gtk/gtkcurve.c:691
Checked g_free at gtk/gtkcurve.c:750
Checked g_free at gtk/gtkcurve.c:1035
Checked g_free at gtk/gtkcurve.c:1037
Checked g_free at gtk/gtkctree.c:3033
Checked g_free at gtk/gtktoolbutton.c:779
Checked g_free at gtk/gtkrecentfilter.c:132
Checked g_free at gtk/gtkrecentfilter.c:206
Checked g_free at gtk/gtkclist.c:2529
Checked g_free at gtk/gtkclist.c:6328
Checked g_free at gtk/gtkclist.c:6340
Checked g_free at gtk/gtkfilefilter.c:134
Checked g_free at gtk/gtkfilefilter.c:183
Checked g_free at gtk/gtkcellrenderertext.c:579
Checked g_free at gtk/gtkcellrenderertext.c:992
Checked g_free at gtk/gtkcellrenderertext.c:1037
Checked g_free at gtk/gtkcombo.c:236
Checked g_free at gtk/gtktoolitem.c:258
Checked g_free at gtk/gtktoolitem.c:1071
Checked g_free at gtk/gtkfilesystem.c:107
Checked g_free at gtk/gtkfilesystem.c:109
Checked g_free at gtk/gtkfilesystem.c:111
Checked g_free at gtk/gtkfilesystem.c:113
Checked g_free at gtk/gtkfilesystem.c:162
Checked g_free at gtk/gtkfilesystem.c:221
Checked g_free at gtk/gtkfilesystem.c:268
Checked g_free at gtk/updateiconcache.c:449
Checked g_free at gtk/gtkimage.c:1902
Checked g_free at gtk/gtkrecentmanager.c:364
Checked g_free at gtk/gtkrecentmanager.c:1738
Checked g_free at gtk/gtkrecentmanager.c:1741
Checked g_free at gtk/gtktextiter.c:1363
Checked g_free at gtk/gtktextiter.c:1781
Checked g_free at gtk/gtktextbuffer.c:4160
Checked g_free at gtk/gtkrc.c:1167
Checked g_free at gtk/gtkrc.c:1173
Checked g_free at gtk/gtkrc.c:3040
Checked g_free at gtk/gtkrc.c:3396
Checked g_free at gtk/gtkrc.c:4052
Checked g_free at gtk/gtktoolbar.c:3857
Checked g_free at gtk/gtkcellrendererpixbuf.c:340
Checked g_free at gtk/gtkpathbar.c:1139
Checked g_free at gtk/gtkpreview.c:204
Checked g_free at gtk/gtkpreview.c:420
Checked g_free at gtk/gtkpreview.c:553
Checked g_free at gtk/gtkselection.c:1119
Checked g_free at gtk/gtkselection.c:2942
Checked g_free at gtk/gtkentrycompletion.c:574
Checked g_free at gtk/gtkentrycompletion.c:1096
Checked g_free at gtk/gtkwidget.c:6923
Checked g_free at gtk/gtkfilesel.c:2390
Checked g_free at gtk/gtkfilesel.c:2705
Checked g_free at gtk/gtkfilesel.c:2707
Checked g_free at gtk/gtkfilesel.c:2709
Checked g_free at gtk/gtkfilesel.c:2711
Checked g_free at gtk/gtkfilesel.c:3952
Checked g_free at gtk/gtkfilesel.c:3954
Checked g_free at gtk/gtktext.c:944
Checked g_free at gtk/gtktext.c:1228
Checked g_free at gtk/gtktext.c:1233
Checked g_free at gdk-pixbuf/io-png.c:277
Checked g_free at gdk-pixbuf/io-tga.c:232
Checked g_free at gdk-pixbuf/io-tga.c:937
Checked g_free at gdk-pixbuf/io-tga.c:940
Checked g_free at gdk-pixbuf/io-pcx.c:107
Checked g_free at gdk-pixbuf/io-pcx.c:109
Checked g_free at gdk-pixbuf/io-pcx.c:113
Checked g_free at gdk-pixbuf/io-pcx.c:115
Checked g_free at gdk-pixbuf/io-ico.c:180
Checked g_free at gdk-pixbuf/io-ico.c:183
Checked g_free at gdk-pixbuf/io-bmp.c:612
Checked g_free at gdk-pixbuf/io-ras.c:285
Checked g_free at gdk-pixbuf/io-ras.c:287
Checked g_free at tests/testmultidisplay.c:43
Checked g_free at gdk/gdk.c:461
Checked g_free at gdk/gdkwindow.c:2121
Checked g_free at gdk/win32/gdkproperty-win32.c:411
Checked g_free at gdk/win32/gdkgc-win32.c:111
Checked g_free at gdk/win32/gdkgc-win32.c:643
Checked g_free at gdk/gdkevents.c:469
Checked g_free at gdk/gdkevents.c:479
Checked g_free at gdk/linux-fb/miarc.c:839
Checked g_free at gdk/linux-fb/mispans.c:199
Checked g_free at gdk/linux-fb/mispans.c:372
Checked g_free at gdk/linux-fb/mispans.c:374
Checked g_free at gdk/linux-fb/mispans.c:442
Checked g_free at gdk/gdkrgb.c:530
Checked g_free at gdk/gdkrgb.c:539
Checked g_free at gdk/gdkrgb.c:542
Checked g_free at gdk/x11/gdkwindow-x11.c:193
Checked g_free at gdk/x11/gdkinput-x11.c:251
Checked g_free at gdk/x11/gdkinput-x11.c:253
Checked g_free at gdk/x11/gdkinput-x11.c:255
Checked g_free at gdk/x11/gdkscreen-x11.c:643
Comment 1 Morten Welinder 2006-11-04 02:19:33 UTC
Also, g_strdup handles NULL.

Checked g_strdup at gtk/gtkaboutdialog.c:843
Checked g_strdup at gtk/gtkaboutdialog.c:896
Comment 2 Djihed Afifi 2007-03-07 23:06:27 UTC
How did you generate that list? a lot has changes and it seems this could be solved easily with some sed-fu, given an up to date list.
Comment 3 Morten Welinder 2007-03-08 01:09:04 UTC
gnumeric/tools/check-gfrees
Comment 4 Djihed Afifi 2007-03-08 09:31:24 UTC
Quick cleaning of output to list.txt and applied:

tac list.txt | sed 's,:, ,g'  | while read i j; do let "k = $j - 1 " ; LSPACES=`sed -n "${k} {/^\([ \t]*\).*/s//\1/p}" $i` ;   sed -i "${j} {s/^[ \t]*/${LSPACES}/g}" $i ;  sed -i "${k}d" $i; done

Multiple sed commands to make the g_free call line have exactly the same leading spaces as the deleted NULL check. Had to correct one instance. Patch will be attached. Hand checked, but I don't know which are performance critical.
Comment 5 Djihed Afifi 2007-03-08 09:32:11 UTC
Created attachment 84226 [details] [review]
Patch to remove pointless NULL checks
Comment 6 Matthias Clasen 2007-03-09 22:01:50 UTC
2007-03-09  Matthias Clasen <mclasen@redhat.com>

        * Everywhere: Remove unnecessary NULL checks before
        g_free().  (#369666, Morten Welinder, Djihed Afifi)