Re: [g-a-devel]GNOME Speech Weirdness - solution(s)
- From: Michael Meeks <michael ximian com>
 
- To: Marc Mulcahy <marc mulcahy sun com>
 
- Cc: accessibility mailing list <gnome-accessibility-devel gnome org>
 
- Subject: Re: [g-a-devel]GNOME Speech Weirdness - solution(s)
 
- Date: 13 Sep 2002 04:44:01 +0100
 
Hi Marc,
	A long mail - just to say to start with, that things are getting a lot
nicer in gnome-speech, which is excellent;
On Fri, 2002-09-13 at 02:08, Marc Mulcahy wrote:
> Blam!
	:-)
> It looks to me as though something has caused the stack to blow up (entry 
> to g_malloc shows n_bytes to be corrupted)a but the value passed to 
> g_malloc from CORBA_string_alloc looks OK.
	I'd guess instead that the g_malloc trace is bogus - and that we're
just getting standard heap corruption.
>  It appears to be attempting to 
> throw a "COM failure" exception, but this is the same behavior I was seeing 
> with the Viavoice driver when it was simply trying to demarshal a string 
> within a sequence of structs.
	Interesting; I'll have a poke.
> I have a bad feeling that this is something dumb I'm doing and not 
> seeing...  Flames welcome <sigh> :)
	:-)
	reading test-speech.c again I see:
static CORBA_Object
select_server ()
	You know how many arguments select_server takes: none, so I suggest
using 'select_server (void)' for good style.
	Looking at the prevalance of:
  text = g_strdup_printf ("%d parameters supported.\n", list->_length);
  printf (text);
  GNOME_Speech_SynthesisDriver_say (driver, text, &ev);
  g_free (text);
	I would write a 'speech_driver_say (driver *, char *, ...); simply for
good style,
  if (driver_name)
    {
      printf ("Driver naem: %s\n", driver_name);
      CORBA_free (driver_name);
    }
	Of course, as I say, CORBA strings can never be NULL, so the branches
here are unnecessary, but of course you do need a branch:
  if (!BONOBO_EX (&ev)) {
  }
	Since a method will return an un-initialized value on failure; ie. if
you do CORBA_free (Foo_getString (obj, &ev)); you just wrote a bug,
since it might be uninitialized [ as per. the spec. ].
	I think it's prolly worth diluting this, and giving harder garentees
for the next rev. of ORBit2 - but until then you have to check for
exceptions before using (especially freeing) the result of a method:
	Oh; looking at the warnings again:
synthesisdriver.c: In function `impl_getParameterValueDescription':
synthesisdriver.c:160: warning: `d' might be used uninitialized in this
function
	It looks like we need a d=NULL, in case tmp == NULL at entry; and of
course a (d && d->desc ? d->desc : "") in the dup.
	Doing a make install after a clean configure I got:
Making install in java
make[1]: Entering directory `/opt/ngnome2/src/gnome-speech/java'
no \
-emitAll -i /usr/share/idl/bonobo-activation-2.0 \
-pkgPrefix GNOME org \
-pkgPrefix Bonobo org.GNOME \
-fallTie ../idl/*.idl 
/bin/sh: no: command not found
make[1]: *** [org/GNOME/Speech/*.java] Error 127
make[1]: Leaving directory `/opt/ngnome2/src/gnome-speech/java'
make: *** [install-recursive] Error 1
	Bingo - found the problem:
(gdb) 
#9  0x08049259 in do_test (driver=0x80568f8) at test-speech.c:172
172           CORBA_free (synth_name);
(gdb) l
167         }
168       synth_version =
GNOME_Speech_SynthesisDriver__get_synthesizerVersion (driver, &ev);
169       if (synth_version)
170         {
171           printf ("Synthesizer Version: %s\n", synth_version);
172           CORBA_free (synth_name);
173         }
174
175       printf ("\nPlease select a test.\n\n");
176       GNOME_Speech_SynthesisDriver_say (driver, "Please select a
test.", &ev);
	cf. line 172 for the obvious mistake.
	How I found this so fast, is because in my default (Linux/glibc)
environment I always do export MALLOC_CHECK_=2, which increases the cost
of memory allocation, but will (often) tell you when you double free /
free in error. Well worth exporting for most hackers.
	HTH, I'm sure it's the fix.
	Regards,
		Michael.
-- 
 mmeeks gnu org  <><, Pseudo Engineer, itinerant idiot
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]