[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-optimize
Subject:    Re: Triple code duplication
From:       Karl Vogel <karl.vogel () seagha ! com>
Date:       2004-08-10 14:02:06
Message-ID: 20040810140206.510.qmail () ktown ! kde ! org
[Download RAW message or body]

On 09 Aug 2004, you wrote in gmane.comp.kde.devel.optimize:

> On Saturday 24 July 2004 11:50, Karl Vogel wrote:
>> While converting kdelibs to a version that explicitly defines
>> what should be exported (using KDE_EXPORT), I noticed that a few
>> things are duplicated. 
>> 
>> For example:
>> 
>> $ objdump -CT /opt/kde/lib/kde3/kbzip2filter.so |grep init_
>> 00001ff0 g    DF .text  00000052  Base        init_kbzip2filter
> As wanted.
> 
>> $ objdump -CT /opt/kde/lib/kde3/kio_help.so |grep init_
>> 0000d900 g    DF .text  00000052  Base        init_kbzip2filter
>> 
>> $ objdump -CT /opt/kde/lib/kde3/kio_ghelp.so |grep init_
>> 0000d900 g    DF .text  00000052  Base        init_kbzip2filter
> Side effect, due to what you noticed:
>> kdelibs/kdoctools uses kbzip2filter.cpp and compiles it directly 
>> into the kio_help.so and kio_ghelp.so shared libs.

Well it's less severe than I first thought... it's only the wrapper
class that is included 3 times.. not the bzip2 code itself.

>> Since this is exactly the same sourcecode as kioslave/bzip2, we
>> now end up with this code duplicated 3 times!
> So? For a little bit of unbzip2 code, it's not worth making a 
> shared library, when every KDE code (other than kio_*help) gets
> that code dlopened from kbzip2filter.so 
> 
> If you want to fix this, add a #define INCLUDED_BY_KIO_HELP in
> kio_help.* and #ifndef INCLUDED_BY_KIO_HELP around the init_ 
> function.

I don't have the sources with me at the moment.. but can't you just
link kbzipfilter2.so to kio_help.so / kio_ghelp.so ?!


>> I'm also wary as I think this can introduce subtle bugs.. ie if 
>> one of those versions is used and then another shared lib is
>> opened containing a version, won't this override the present 
>> version ?! What if some state is kept in a global variable that
>> is now overridden by the new version! 
> I don't follow. The code dlopening kio_help isn't the same as the
> code dlopening kbzip2filter.so, so the above isn't a problem.

Well I was mistaken anyway... in case the same symbols are present
in 2 shared libs, then the ones from the first loaded lib are used. 

And in this case, the libs won't be loaded by the same code anyway, 
right?
_______________________________________________
Kde-optimize mailing list
Kde-optimize@kde.org
https://mail.kde.org/mailman/listinfo/kde-optimize
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic