[Kde-pim] [patch] handling of static data in akonadi and mailtransport
Ingo Klöcker
kloecker at kde.org
Tue May 20 22:34:30 BST 2008
On Tuesday 20 May 2008, Jaroslaw Staniek wrote:
> 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;
> }
Or just
if ( s_slavePool.isDestroyed() ) {
return;
}
I guess it doesn't really make much of a difference. deleteLater() will
most likely have no effect because event processing will already have
been stopped when s_slavePool is destroyed.
Regards,
Ingo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-pim/attachments/20080520/57e51eae/attachment.sig>
-------------- next part --------------
_______________________________________________
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