Hi .. 

I mailed with Kevin B. Hendricks this weekend and we tried to find out,
why the OpenOffice.org binaries did not work under a normal
Debian-System.

Kevin build his OpenOffice.org with gcc-3.1 and glibc2.2.5 and
binutils2.12.90.0.7, but we got a SIGKILL after the splash screen comes.

Beside Jack Howorth he found out, that this code on the bottom is
breaking the functionality of OpenOffice.org on Debian for PowerPC and
SuSE ... 

We are working on it, but we are not really sure, where the bug comes
from. If Kevin builds the libcppuhelper3.so lib (which location is in
/usr/lib/openoffice/program) with -O0, then OpenOffice.org starts and
works (up to choosing a connection for the external adressdatabase, then
you got a SIGKILL)

It seems also, that the libc6 is broken on PowerPC. I send Ben Collins a
patch and I think he will apply this to the next glibc-package. You can
have a look to "my" libc6 here:
  http://bourbaki.math.uni-kiel.de/~jpalic/debian/pool/main/l/libc6/
 
I have to check out, what are the differences be between Kevins
toolchain and ours.

Haggai, you tried to build OOo with gcc-3.1 on Intel and got a similar
SIGKILL as we on PowerPC. I wonder, if the build of libcppuhelper3.so
with -O0 instead of -O2 will work for you, too.

Below the mail from Kevin B. Hendrick about the PowerPC issue .... 


        regards
                Jan

----- Forwarded message from "Kevin B. Hendricks" <[EMAIL PROTECTED]> -----

Reply-To: dev@openoffice.org
From: "Kevin B. Hendricks" <[EMAIL PROTECTED]>
To: dev@udk.openoffice.org, dev@openoffice.org
Date: Fri, 5 Jul 2002 23:50:55 -0400
X-Mailer: KMail [version 1.4]
Subject: [dev] question on cppuhelper throwException and double 
TYPELIB_DANGER_RELEASE

Hi,

In cppuhelper/source/exc_thrower.cxx is the routine cppu::throwException().  I 
have a backtrace 
showing we are actually invoking TYPELIB_DANGER_RELEASE(pComp) twice.  
That macro does *not* check if pComp exists before invoking its release method. 
 
This is results in a jump into the weeds that is generating a SIGILL on Debian 
ppc Linux machines.

So I have some questions.

1. can xThrower->throwException(rExc) actually return?

TYPELIB_DANGER_RELEASE( pComp );
xThrower->throwException( rExc );
                                
2. if so, then why are we not checking if pComp still exists (or if it has
already been released) before we call  

TYPELIB_DANGER_RELEASE( pComp );

the second time.

3. If not, could this be a race in that xThrower->throwException may actually 
return 
briefly until the excetion that is thrown is actually caught.  If it should not 
ever 
return perhaps we should put an infinite loop there to prevent a race.

Here is the full routine.

void SAL_CALL throwException( const Any & rExc ) SAL_THROW( (Exception) )
{
        if (rExc.getValueTypeClass() == TypeClass_EXCEPTION)
        {
                OUString aExceptionName( 
RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception") );
                typelib_TypeDescription * pComp = 0;
                TYPELIB_DANGER_GET( &pComp, rExc.getValueTypeRef() );
                // must be derived from com.sun.star.uno.Exception
                for ( typelib_CompoundTypeDescription * pTD = 
(typelib_CompoundTypeDescription *)pComp;
                          pTD; pTD = pTD->pBaseTypeDescription )
                {
                        if (aExceptionName == 
rtl::OUString(((typelib_TypeDescription *)pTD)->pTypeName))
                        {
                                Mapping aUno2Cpp( OUString( 
RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) ),
                                                                  OUString( 
RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) ) );
                                OSL_ENSURE( aUno2Cpp.is(), "### cannot get uno 
to cpp mapping!" );
                                if (aUno2Cpp.is())
                                {
                                        uno_Interface * pUnoI = new 
ExceptionThrower();
                                        (*pUnoI->acquire)( pUnoI );
                                        Reference< XThrower > xThrower;
                                        aUno2Cpp.mapInterface(
                                                reinterpret_cast< void ** >( 
&xThrower ),
                                                pUnoI, ::cppu::getCppuType( 
(const Reference< XThrower > *)0 ) );
                                        (*pUnoI->release)( pUnoI );

                                        if (xThrower.is())
                                        {
                                                TYPELIB_DANGER_RELEASE( pComp );
                                                xThrower->throwException( rExc 
);
                                        }
                                }
                                break;
                        }
                }
                TYPELIB_DANGER_RELEASE( pComp );
        }
        throw RuntimeException(
                OUString( RTL_CONSTASCII_USTRINGPARAM("failed throwing 
exception generically!") ),
                Reference< XInterface >() );
}


Any guidance would be greatly appreciated.

Thanks,

Kevin


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


----- End forwarded message -----

-- 
  .''`.    Jan-Hendrik Palic     |
 : :' : ** Debian GNU/ Linux **  |   ** OpenOffice.org **       ,.. ,..
 `. `'   http://www.debian.org   | http://www.openoffice.org  ,: ..`   `
   `-  [EMAIL PROTECTED] |                           '  `  `

Attachment: pgpZkYLVbFmqE.pgp
Description: PGP signature

Reply via email to