[Kde-pim] [patch] handling of static data in akonadi and mailtransport
Jaroslaw Staniek
js at iidea.pl
Tue May 20 19:40:54 BST 2008
Ingo Klöcker said the following, On 2008-05-20 20:02:
> On Tuesday 20 May 2008, Jarosław Staniek wrote:
>> Ingo Klöcker said the following, On 2008-05-20 00:14:
>>> On Monday 19 May 2008, Jarosław Staniek wrote:
>>>> Index: mailtransport/socket.cpp
>>>> ==================================================================
>>>> = --- mailtransport/socket.cpp (wersja 809997)
>>>> +++ mailtransport/socket.cpp (kopia robocza)
>>>> @@ -54,6 +54,8 @@
>>>> void slotModeChanged( QSslSocket::SslMode state );
>>>> void slotSocketRead();
>>>> void slotSslErrors( const QList<QSslError> &errors );
>>>> + private:
>>>> + QString msg;
>>> This should be
>>> + QString m_msg;
>>>
>>>> };
>>>> }
>>>>
>>>> @@ -102,19 +104,19 @@
>>>> return;
>>>> }
>>>>
>>>> - static QString msg;
>>>> - msg += QLatin1String( socket->readAll() );
>>>> + QString m_msg;
>>> The above line has to be deleted.
>> Sorry I must have been tired too. Attached updated patch.
>> Till, Bernhard: this is the newest patch to apply (after removing the
>> old one).
>>
>>>> + m_msg += QLatin1String( socket->readAll() );
>>>>
>>>> - if ( !msg.endsWith( QLatin1Char( '\n' ) ) ) {
>>>> + if ( !m_msg.endsWith( QLatin1Char( '\n' ) ) ) {
>>>> return;
>>>> }
>>>>
>>>> #ifdef comm_debug
>>>> - kDebug() << socket->isEncrypted() << msg.trimmed();
>>>> + kDebug() << socket->isEncrypted() << m_msg.trimmed();
>>>> #endif
>>>>
>>>> - emit q->data( msg );
>>>> - msg.clear();
>>>> + emit q->data( m_msg );
>>>> + m_msg.clear();
>>>> }
>>> Concerning mailtransport/smtpjob.cpp I'm wondering whether
>>> SlavePool can be destroyed before the last SmtpJob is destroyed. I
>>> guess it would be saner to make the last SmtpJob destroy the slave
>>> pool. The pool is anyway cleared each time the reference count
>>> drops to 0, so the slave pool could as well be destroyed at that
>>> point. And in the c'tor of SmtpJob the pool would be created if it
>>> does not exist. I don't think K_GLOBAL_STATIC is the correct tool
>>> for the job, but I'm too tired to really think about it right now.
>> This woud be extra code and allocation to save perhaps 10 bytes.
>
> This isn't about saving a few bytes. If the global static s_slavePool is
> destroyed before the last SmtpJob is destroyed then accessing
> s_slavePool in SmtpJob::~SmtpJob() will cause a crash at program exit
> (or, more precisely, it will cause a qFatal()).
>
> I have no idea when those SmtpJobs are destroyed if they are still
> running on program exit, so I don't know whether this crash can
> actually happen. But better safe than sorry.
>
> So please add
>
> if ( ! s_slavePool.isDestroyed() ) {
> // okay, it is safe to access s_slavePool
> ...
> }
>
> (without the comment) everywhere in SmtpJob where s_slavePool is
> accessed.
Or just this at the beginning of each method? :
if ( s_slavePool.isDestroyed() ) {
deleteLater();
return;
}
--
regards / pozdrawiam, Jaroslaw Staniek
Sponsored by OpenOffice Polska (http://www.openoffice.com.pl/en) to work on
Kexi & KOffice (http://www.kexi.pl/en, http://www.koffice.org/kexi)
KDE Libraries for MS Windows (http://windows.kde.org)
_______________________________________________
KDE PIM mailing list kde-pim at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/
More information about the kde-pim
mailing list