[g-a-devel]Re: Gnome Speech - fixups - (patch)



Hi Michael,

Please commit!

Thanks for the bug fix. I knew it was something dumb :-) and of course not where I was looking.

I'm putting that MALLOC_CHECK_ in now, since this isn't the first or last time I'll have malloc problems :-)

Thanks-- I like the changes to test-speech-- much cleaner and nicer.

Going sheepishly back to festival driver work...

Marc

At 05:07 AM 9/13/2002 +0100, Michael Meeks wrote:
Hi Marc,

        As discussed, with this I get cleaner code, nicer output, several
theoretical segvs / leaks killed, clean exit, better exception handling
etc.

        May I commit ?

        Regards,

                Michael.

Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gnome-speech/ChangeLog,v
retrieving revision 1.7.2.18
diff -u -p -u -r1.7.2.18 ChangeLog
--- ChangeLog   12 Sep 2002 19:19:00 -0000      1.7.2.18
+++ ChangeLog   13 Sep 2002 03:10:36 -0000
@@ -1,3 +1,19 @@
+2002-09-13  Michael Meeks  <michael ximian com>
+
+       * gnome-speech/synthesisdriver.c
+       (impl_getParameterValueDescription): don't use
+       uninitialized variable.
+
+       * test/test-speech.c (main): fix ev / select_server
+       (select_server): upd.
+       (driver_say_print): impl. helper.
+       (parameter_tests): use helper throught.
+       (do_test): don't double free, use helper.
+       include stdlib.h for atoi etc.
+       (parameter_tests): pass ev around more normally.
+       (main): free exceptions at end, do a debug
+       shutdown, so we can track ref leaks correctly.
+
 2002-09-12  Marc Mulcahy <marc mulcahy sun com>

        * configure.in drivers/Makefile.am drivers/festival: Added basic
Index: gnome-speech/synthesisdriver.c
===================================================================
RCS file: /cvs/gnome/gnome-speech/gnome-speech/Attic/synthesisdriver.c,v
retrieving revision 1.1.2.4
diff -u -p -u -r1.1.2.4 synthesisdriver.c
--- gnome-speech/synthesisdriver.c 12 Sep 2002 16:22:17 -0000 1.1.2.4
+++ gnome-speech/synthesisdriver.c      13 Sep 2002 03:10:36 -0000
@@ -157,7 +157,7 @@ impl_getParameterValueDescription (Porta
   SynthesisDriver *driver = synthesis_driver_from_servant (servant);
   ParameterPrivate *priv;
   GSList *tmp;
-  ValueDescription *d;
+  ValueDescription *d = NULL;

   g_return_val_if_fail (driver, NULL);
   priv = find_parameter (driver, name);
@@ -169,7 +169,7 @@ impl_getParameterValueDescription (Porta
       if (d->value == value)
        break;
       }
-  return CORBA_string_dup (d->description ? d->description : "");
+  return CORBA_string_dup (d && d->description ? d->description : "");
 }


@@ -293,6 +293,7 @@ synthesis_driver_add_parameter_value_des
   d->description = g_strdup (description);
   priv->value_descriptions = g_slist_append (priv->value_descriptions, d);
 }
+
 BONOBO_TYPE_FUNC_FULL (SynthesisDriver,
                       GNOME_Speech_SynthesisDriver,
                       bonobo_object_get_type (),
Index: test/test-speech.c
===================================================================
RCS file: /cvs/gnome/gnome-speech/test/test-speech.c,v
retrieving revision 1.2.2.3
diff -u -p -u -r1.2.2.3 test-speech.c
--- test/test-speech.c  12 Sep 2002 16:22:17 -0000      1.2.2.3
+++ test/test-speech.c  13 Sep 2002 03:10:36 -0000
@@ -1,24 +1,51 @@
 #include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
 #include <glib/gmain.h>
 #include <libbonobo.h>
 #include <gnome-speech/gnome-speech.h>

+static void
+driver_say_print (GNOME_Speech_SynthesisDriver driver,
+                 const char                  *format,
+                 ...)
+{
+  va_list args;
+  char *str;
+  CORBA_Environment ev;
+
+  va_start (args, format);
+
+  CORBA_exception_init (&ev);
+
+  str = g_strdup_vprintf (format, args);
+  GNOME_Speech_SynthesisDriver_say (driver, str, &ev);
+  if (BONOBO_EX (&ev))
+    printf ("Exception %s writing '%s'",
+           bonobo_exception_get_text (&ev), str);
+  else
+    printf ("%s", str);
+  g_free (str);

+  CORBA_exception_free (&ev);
+
+  va_end (args);
+}

 static CORBA_Object
-select_server ()
+select_server (CORBA_Environment *ev)
 {
-  CORBA_Environment ev;
+
   int i;
   Bonobo_ServerInfoList *servers;
   Bonobo_ServerInfo *info;
   char input[81];
   CORBA_Object rv;

-  CORBA_exception_init (&ev);
- servers = bonobo_activation_query ("repo_ids.has ('IDL:GNOME/Speech/SynthesisDriver:1.0')",
-                                    NULL, &ev);
-  if (ev._major != CORBA_NO_EXCEPTION)
+  servers = bonobo_activation_query (
+         "repo_ids.has ('IDL:GNOME/Speech/SynthesisDriver:1.0')",
+         NULL, ev);
+  if (BONOBO_EX (ev))
     {
       return CORBA_OBJECT_NIL;
     }
@@ -44,75 +71,52 @@ select_server ()
     }
   info = &servers->_buffer[i];
   printf ("Atempting to activate %s.\n", info->iid);
-  rv = bonobo_activation_activate_from_id (info->iid,
-                                       0, NULL, &ev);
+  rv = bonobo_activation_activate_from_id (
+         (const Bonobo_ActivationID) info->iid,
+         0, NULL, ev);
   CORBA_free (servers);
+
   return rv;
 }

-
-
 static void
-parameter_tests (GNOME_Speech_SynthesisDriver driver)
+parameter_tests (GNOME_Speech_SynthesisDriver driver, CORBA_Environment *ev)
 {
   GNOME_Speech_ParameterList *list;
   int i;
-  gchar *text;
   gboolean done = FALSE;
-  CORBA_Environment ev;

-  CORBA_exception_init (&ev);
-  list = GNOME_Speech_SynthesisDriver_getSupportedParameters (driver, &ev);
-  if (list->_length == 0)
+  list = GNOME_Speech_SynthesisDriver_getSupportedParameters (driver, ev);
+  if (BONOBO_EX (ev) || list->_length == 0)
     {
       CORBA_free (list);
-      printf ("No parameters supported.\n\n");
- GNOME_Speech_SynthesisDriver_say (driver, "No parameters supported.",&ev);
+      driver_say_print (driver, "No parameters supported.\n");
       return;
     }
-  text = g_strdup_printf ("%d parameters supported.\n", list->_length);
-  printf (text);
-  GNOME_Speech_SynthesisDriver_say (driver, text, &ev);
-  g_free (text);
+
+  driver_say_print (driver, "%d parameters supported.\n", list->_length);
   for (i = 0; i < list->_length; i++)
   {
     GNOME_Speech_Parameter *p = &(list->_buffer[i]);
-    printf ("Name gotten is %s value is %p.\n", p->name, p->name);
-    text = g_strdup_printf ("parameter %d: %s.\n", i+1, p->name);
-    printf (text);
-    g_free (text);
-    text = g_strdup_printf ("   minimum value: %.2lf.\n", p->min);
-    printf (text);
-    GNOME_Speech_SynthesisDriver_say (driver, text, &ev);
-    g_free (text);
-    text = g_strdup_printf ("   current value: %.2lf.\n", p->current);
-    printf (text);
-    GNOME_Speech_SynthesisDriver_say (driver, text, &ev);
-    g_free (text);
-    text = g_strdup_printf ("   maximum value: %.2lf.\n", p->max);
-    printf (text);
-    GNOME_Speech_SynthesisDriver_say (driver, text, &ev);
-    g_free (text);
-    text = g_strdup_printf ("   %s\n",
-                            (p->enumerated)
-                            ? "Is enumerated."
-                            : "Is not enumerated.");
-    printf (text);
-    GNOME_Speech_SynthesisDriver_say (driver, text, &ev);
-    g_free (text);
+
+    driver_say_print (driver, "parameter %d: %s.\n", i + 1, p->name);
+    driver_say_print (driver, "   minimum value: %.2lf.\n", p->min);
+    driver_say_print (driver, "   current value: %.2lf.\n", p->current);
+    driver_say_print (driver, "   maximum value: %.2lf.\n", p->max);
+    driver_say_print (driver, "   %s\n",
+                     (p->enumerated) ? "Is enumerated."
+                                     : "Is not enumerated.");
   }
+
   while (!done)
     {
       gchar input[81];
       gint choice;
       gdouble new_value;
       GNOME_Speech_Parameter *p;
-      gchar *prompt;

- prompt = g_strdup_printf ("Parameter to change (1 through %d, 0 to exit): ", list->_length);
-      printf (prompt);
-      GNOME_Speech_SynthesisDriver_say (driver, prompt, &ev);
-      g_free (prompt);
+      driver_say_print (driver, "Parameter to change (1 through %d, "
+                       "0 to exit): ", list->_length);
       fgets (input, 80, stdin);
       choice = atoi(input);
       if (choice == 0)
@@ -121,82 +125,70 @@ parameter_tests (GNOME_Speech_SynthesisD
          break;
        }
       p = &(list->_buffer[choice-1]);
- prompt = g_strdup_printf ("new %s? %.2lf through %.2lf.", p->name, p->min, p->max);
-      printf (prompt);
-      GNOME_Speech_SynthesisDriver_say (driver, prompt, &ev);
-    g_free (prompt);
-    fgets (input, 80, stdin);
-    new_value = atof (input);
-    printf ("Setting to %lf.\n", new_value);
- GNOME_Speech_SynthesisDriver_setParameterValue (driver, p->name, new_value, &ev);
+      driver_say_print (driver, "new %s? %.2lf through %.2lf.",
+                       p->name, p->min, p->max);
+      fgets (input, 80, stdin);
+      new_value = atof (input);
+      printf ("Setting to %lf.\n", new_value);
+ GNOME_Speech_SynthesisDriver_setParameterValue (driver, p->name, new_value, ev);
     }
-

-      CORBA_free (list);
+  CORBA_free (list);
 }

-
-
 static int
-do_test (GNOME_Speech_SynthesisDriver driver)
+do_test (GNOME_Speech_SynthesisDriver driver, CORBA_Environment *ev)
 {
   char input[81];
   int choice;
   CORBA_string driver_name, driver_version;
   CORBA_string synth_name, synth_version;
-  CORBA_Environment ev;

-  CORBA_exception_init (&ev);
-  driver_name = GNOME_Speech_SynthesisDriver__get_driverName (driver, &ev);
-  if (driver_name)
+  driver_name = GNOME_Speech_SynthesisDriver__get_driverName (driver, ev);
+  if (!BONOBO_EX (ev))
     {
-      printf ("Driver naem: %s\n", driver_name);
+      printf ("Driver name: %s\n", driver_name);
       CORBA_free (driver_name);
     }
- driver_version = GNOME_Speech_SynthesisDriver__get_driverVersion (driver, &ev);
-  if (driver_version)
+ driver_version = GNOME_Speech_SynthesisDriver__get_driverVersion (driver, ev);
+  if (!BONOBO_EX (ev))
     {
       printf ("Driver version: %s\n", driver_version);
       CORBA_free (driver_version);
     }
- synth_name = GNOME_Speech_SynthesisDriver__get_synthesizerName (driver, &ev);
-  if (synth_name)
+ synth_name = GNOME_Speech_SynthesisDriver__get_synthesizerName (driver, ev);
+  if (!BONOBO_EX (ev))
     {
-      printf ("Synthesizer naem: %s\n", synth_name);
+      printf ("Synthesizer name: %s\n", synth_name);
       CORBA_free (synth_name);
     }
- synth_version = GNOME_Speech_SynthesisDriver__get_synthesizerVersion (driver, &ev);
-  if (synth_version)
+ synth_version = GNOME_Speech_SynthesisDriver__get_synthesizerVersion (driver, ev);
+  if (!BONOBO_EX (ev))
     {
       printf ("Synthesizer Version: %s\n", synth_version);
-      CORBA_free (synth_name);
+      CORBA_free (synth_version);
     }

-  printf ("\nPlease select a test.\n\n");
-  GNOME_Speech_SynthesisDriver_say (driver, "Please select a test.", &ev);
-  printf ("2: Parameter test.\n");
-  GNOME_Speech_SynthesisDriver_say (driver, "1. Parameter test.", &ev);
-  printf ("0: Exit\n");
-  GNOME_Speech_SynthesisDriver_say (driver, "0. exit.", &ev);
+  driver_say_print (driver, "\nPlease select a test.\n\n");
+  driver_say_print (driver, "1. Parameter test.\n");
+  driver_say_print (driver, "0. Exit.\n");
   printf ("\nSelect test: ");
   fgets (input, 80, stdin);
   choice = atoi (input);
   switch (choice)
     {
     case 1:
-      GNOME_Speech_SynthesisDriver_stop (driver, &ev);
-      parameter_tests (driver);
+      GNOME_Speech_SynthesisDriver_stop (driver, ev);
+      parameter_tests (driver, ev);
       break;
     case 0:
-      GNOME_Speech_SynthesisDriver_stop (driver, &ev);
-      GNOME_Speech_SynthesisDriver_say (driver, "Goodbye.", &ev);
+      GNOME_Speech_SynthesisDriver_stop (driver, ev);
+      GNOME_Speech_SynthesisDriver_say (driver, "Goodbye.", ev);
       return -1;
     }
   return 0;
 }

-
-
 int
 main (int argc, char **argv)
 {
@@ -209,15 +201,15 @@ main (int argc, char **argv)
     {
       g_error ("Can't initialize Bonobo...\n");
     }
-  o = select_server (ev);
-  if (o == CORBA_OBJECT_NIL)
+
+  o = select_server (&ev);
+  if (BONOBO_EX (&ev) || o == CORBA_OBJECT_NIL)
     {
       printf ("No server selected.\n");
       return 0;
     }
-
-  /* Atempt to initialize the driver */

+  /* Atempt to initialize the driver */
   if (!GNOME_Speech_SynthesisDriver_isInitialized (o, &ev) &&
       !GNOME_Speech_SynthesisDriver_driverInit (o, &ev))
     {
@@ -228,10 +220,14 @@ main (int argc, char **argv)
     {
       while (!done)
        {
-         if (do_test ((GNOME_Speech_SynthesisDriver)o))
+         if (do_test (o, &ev))
            done = 1;
        }
-      }
+    }
   CORBA_Object_release (o, &ev);
-  return 0;
+
+  CORBA_exception_free (&ev);
+
+  return bonobo_debug_shutdown ();
 }
+
--
 mmeeks gnu org  <><, Pseudo Engineer, itinerant idiot




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]