Use g_slice_new to replace g_new for better performance.
authorHuang Peng <shawn.p.huang@gmail.com>
Tue, 16 Sep 2008 09:28:14 +0000 (17:28 +0800)
committerHuang Peng <shawn.p.huang@gmail.com>
Tue, 16 Sep 2008 09:28:14 +0000 (17:28 +0800)
client/x11/main.c
lib/gtk2/ibusimclient.c

index 04bfa74cd26fd465721b8c4283a0db21de14dde3..0f1cfa6cf7ce589d119216c2f35117b5824efd00 100644 (file)
@@ -175,7 +175,7 @@ xim_create_ic (XIMS xims, IMChangeICStruct *call_data)
 
     call_data->icid = base_icid ++;
 
-    x11ic = g_new0 (X11IC, 1);
+    x11ic = g_slice_new0 (X11IC);
     x11ic->icid = call_data->icid;
     x11ic->connect_id = call_data->connect_id;
     x11ic->conn = (X11ICONN *)g_hash_table_lookup (_connections,
@@ -211,15 +211,14 @@ xim_destroy_ic (XIMS xims, IMChangeICStruct *call_data)
                 (gconstpointer)(unsigned long)call_data->icid);
 
     ibus_im_client_release_input_context (_client, x11ic->ibus_ic);
-    g_hash_table_remove (_ibus_ic_table, x11ic->ibus_ic);
-    g_free (x11ic->ibus_ic);
-
-    x11ic->conn->clients = g_list_remove (x11ic->conn->clients, (gconstpointer)x11ic);
 
+    g_hash_table_remove (_ibus_ic_table, x11ic->ibus_ic);
     g_hash_table_remove (_x11_ic_table,
                 (gconstpointer)(unsigned long)call_data->icid);
+    x11ic->conn->clients = g_list_remove (x11ic->conn->clients, (gconstpointer)x11ic);
 
-    g_free (x11ic);
+    g_free (x11ic->ibus_ic);
+    g_slice_free (X11IC, x11ic);
 
     return 1;
 }
@@ -318,7 +317,7 @@ xim_open (XIMS xims, IMOpenStruct *call_data)
 
     g_return_val_if_fail (conn == NULL, 1);
 
-    conn = g_new0(X11ICONN, 1);
+    conn = g_slice_new0 (X11ICONN);
 
     g_hash_table_insert (_connections,
         (gpointer)(unsigned long)call_data->connect_id,
@@ -342,7 +341,7 @@ _free_ic (gpointer data, gpointer user_data)
     g_hash_table_remove (_x11_ic_table,
                 (gconstpointer)(unsigned long)x11ic->icid);
 
-    g_free (x11ic);
+    g_slice_free (X11IC, x11ic);
 }
 
 int
@@ -365,7 +364,7 @@ xim_close (XIMS ims, IMCloseStruct *call_data)
 
     g_hash_table_remove (_connections, (gconstpointer)(unsigned long)call_data->connect_id);
 
-    g_free (conn);
+    g_slice_free (X11ICONN, conn);
 
     return 1;
 }
index 86216201c178c61bb785dbf54a131acb9c0f3e9c..2d797702869d37ed461cd5c0dfacab5d031422d6 100644 (file)
@@ -1540,7 +1540,7 @@ struct _KeyPressCallData {
 static KeyPressCallData *
 _key_press_call_data_new (IBusIMClient *client, const gchar *ic, GdkEvent *event)
 {
-    KeyPressCallData *p = g_new (KeyPressCallData, 1);
+    KeyPressCallData *p = g_slice_new (KeyPressCallData);
     p->client = g_object_ref (client);
     p->ic = g_strdup (ic);
     p->event = gdk_event_copy (event);
@@ -1556,7 +1556,7 @@ _key_press_call_data_free (KeyPressCallData *p)
         g_free (p->ic);
         gdk_event_free (p->event);
     }
-    g_free (p);
+    g_slice_free (KeyPressCallData, p);
 }
 
 static void