According to gtk+ API doc, pixbufs loaded with gtk_icon_theme_load_icon() might have some problems.
Quote gtk+ API doc:
"Note that you probably want to listen for icon theme changes and
update the icon. This is usually done by connecting to the
GtkWidget::style-set signal. If for some reason you do not want to
update the icon when the icon theme changes, you should consider
using gdk_pixbuf_copy() to make a private copy of the pixbuf
returned by this function. Otherwise GTK+ may need to keep the old
icon theme loaded, which would be a waste of memory."
It seems that the icons loaded with this API should be copied.
Otherwise gtk+ will keep the whole icon theme in memory after later theme changes.
Need to check out this and fix the memory waste.