THRIFT-3360 Improve cross test servers and clients further

This closes #629
diff --git a/test/c_glib/src/test_client.c b/test/c_glib/src/test_client.c
index b1fe065..fd429c8 100644
--- a/test/c_glib/src/test_client.c
+++ b/test/c_glib/src/test_client.c
@@ -204,7 +204,7 @@
       gint byte_thing, i32_thing, inner_byte_thing, inner_i32_thing;
       gint64 i64_thing, inner_i64_thing;
 
-      TTestXtruct  *xtruct_out,  *xtruct_in,  *inner_xtruct_in;
+      TTestXtruct  *xtruct_out,  *xtruct_out2, *xtruct_in,  *inner_xtruct_in;
       TTestXtruct2 *xtruct2_out, *xtruct2_in;
 
       GHashTable *map_out, *map_in, *inner_map_in;
@@ -217,8 +217,9 @@
       GArray *list_out, *list_in;
 
       TTestNumberz numberz;
+      TTestNumberz numberz2;
 
-      TTestUserId user_id, *user_id_ptr;
+      TTestUserId user_id, *user_id_ptr, *user_id_ptr2;
 
       TTestInsanity *insanity_out, *insanity_in;
       GHashTable *user_map;
@@ -1021,17 +1022,28 @@
                     NULL);
 
       numberz = T_TEST_NUMBERZ_FIVE;
+      numberz2 = T_TEST_NUMBERZ_EIGHT;
       user_id_ptr = g_malloc (sizeof *user_id_ptr);
-      *user_id_ptr = 5000;
+      *user_id_ptr = 5;
+      user_id_ptr2 = g_malloc (sizeof *user_id_ptr);
+      *user_id_ptr2 = 8;
       g_hash_table_insert (user_map, (gpointer)numberz, user_id_ptr);
+      g_hash_table_insert (user_map, (gpointer)numberz2, user_id_ptr2);
       g_hash_table_unref (user_map);
 
       xtruct_out = g_object_new (T_TEST_TYPE_XTRUCT,
-                                 "string_thing", "Truck",
-                                 "byte_thing",   8,
-                                 "i32_thing",    8,
-                                 "i64_thing",    8LL,
+                                 "string_thing", "Hello2",
+                                 "byte_thing",   2,
+                                 "i32_thing",    2,
+                                 "i64_thing",    2LL,
                                  NULL);
+      xtruct_out2 = g_object_new (T_TEST_TYPE_XTRUCT,
+                                 "string_thing", "Goodbye4",
+                                 "byte_thing",   4,
+                                 "i32_thing",    4,
+                                 "i64_thing",    4LL,
+                                 NULL);
+      g_ptr_array_add (xtructs, xtruct_out2);
       g_ptr_array_add (xtructs, xtruct_out);
       g_ptr_array_unref (xtructs);
 
diff --git a/test/c_glib/src/thrift_test_handler.c b/test/c_glib/src/thrift_test_handler.c
index d82befb..a9983b5 100644
--- a/test/c_glib/src/thrift_test_handler.c
+++ b/test/c_glib/src/thrift_test_handler.c
@@ -472,8 +472,6 @@
                                    const TTestInsanity  *argument,
                                    GError              **error)
 {
-  TTestXtruct *hello;
-  TTestXtruct *goodbye;
   TTestXtruct *xtruct_in;
 
   gchar *string_thing = NULL;
@@ -483,7 +481,6 @@
 
   GPtrArray *xtructs;
 
-  TTestInsanity *crazy;
   TTestInsanity *looney;
 
   GHashTable *user_map;
@@ -502,50 +499,10 @@
   guint i;
 
   THRIFT_UNUSED_VAR (iface);
-  THRIFT_UNUSED_VAR (argument);
   THRIFT_UNUSED_VAR (error);
 
   printf ("testInsanity()\n");
 
-  hello = g_object_new (T_TEST_TYPE_XTRUCT,
-                        "string_thing", "Hello2",
-                        "byte_thing",   2,
-                        "i32_thing",    2,
-                        "i64_thing",    2,
-                        NULL);
-
-  goodbye = g_object_new (T_TEST_TYPE_XTRUCT,
-                          "string_thing", "Goodbye4",
-                          "byte_thing",   4,
-                          "i32_thing",    4,
-                          "i64_thing",    4,
-                          NULL);
-
-  crazy = g_object_new (T_TEST_TYPE_INSANITY, NULL);
-  g_object_get (crazy,
-                "userMap", &user_map,
-                "xtructs", &xtructs,
-                NULL);
-
-  user_id = g_malloc(sizeof *user_id);
-  *user_id = 8;
-  g_hash_table_insert (user_map,
-                       GINT_TO_POINTER (T_TEST_NUMBERZ_EIGHT),
-                       user_id);
-
-  g_ptr_array_add (xtructs, goodbye);
-
-  user_id = g_malloc(sizeof *user_id);
-  *user_id = 5;
-  g_hash_table_insert (user_map,
-                       GINT_TO_POINTER (T_TEST_NUMBERZ_FIVE),
-                       user_id);
-
-  g_ptr_array_add (xtructs, hello);
-
-  g_hash_table_unref (user_map);
-  g_ptr_array_unref (xtructs);
-
   first_map = g_hash_table_new_full (g_direct_hash,
                                      g_direct_equal,
                                      NULL,
@@ -557,17 +514,17 @@
 
   g_hash_table_insert (first_map,
                        GINT_TO_POINTER (T_TEST_NUMBERZ_TWO),
-                       crazy);
+                       argument);
   g_hash_table_insert (first_map,
                        GINT_TO_POINTER (T_TEST_NUMBERZ_THREE),
-                       crazy);
+                       argument);
 
-  /* Increment crazy's ref count since first_map now holds two
+  /* Increment argument's ref count since first_map now holds two
      references to it and would otherwise attempt to deallocate it
      twice during destruction. We do this instead of creating a copy
-     of crazy in order to mimic the C++ implementation (and since,
-     frankly, the world needs less crazy, not more). */
-  g_object_ref (crazy);
+     of argument in order to mimic the C++ implementation (and since,
+     frankly, the world needs less argument, not more). */
+  g_object_ref (argument);
 
   looney = g_object_new (T_TEST_TYPE_INSANITY, NULL);
   g_hash_table_insert (second_map,