diff options
| author | 2010-01-13 22:32:43 +0000 | |
|---|---|---|
| committer | 2010-01-13 22:32:43 +0000 | |
| commit | b01ceb835c17faa9e327b593ef143be111e93633 (patch) | |
| tree | a0032fa0fc747147f5e276e56e09c28196dcc105 /src | |
| parent | Add names for mdichild objects (diff) | |
| download | KVIrc-b01ceb835c17faa9e327b593ef143be111e93633.tar.gz KVIrc-b01ceb835c17faa9e327b593ef143be111e93633.tar.bz2 KVIrc-b01ceb835c17faa9e327b593ef143be111e93633.zip | |
avoid a race condition on help indexing
avoid crashes due to kvikvsactions deleted while their internal script is still executing (happens because we clear() out menu popups at every show, and a user could get a popup shown before its code finishes executing)
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3836 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src')
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_action.cpp | 11 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_action.h | 4 | ||||
| -rw-r--r-- | src/kvirc/kvs/kvi_kvs_useraction.cpp | 7 | ||||
| -rw-r--r-- | src/modules/help/helpwindow.cpp | 2 |
4 files changed, 7 insertions, 17 deletions
diff --git a/src/kvirc/kvs/kvi_kvs_action.cpp b/src/kvirc/kvs/kvi_kvs_action.cpp index 97a36512f..2849b915a 100644 --- a/src/kvirc/kvs/kvi_kvs_action.cpp +++ b/src/kvirc/kvs/kvi_kvs_action.cpp @@ -40,27 +40,22 @@ KviKvsAction::KviKvsAction(QObject * pParent, const QString &szKeySequence) : KviAction(pParent,szName,szVisibleName,szDescription,pCategory,szBigIcon,iSmallIconId,uFlags,szKeySequence) { - QString tmp = KVI_KVS_ACTION_SCRIPT_NAME_PREFIX; - tmp += szName; - m_pScript = new KviKvsScript(tmp,szScriptCode); + m_szScript = QString(szScriptCode); } KviKvsAction::~KviKvsAction() { unregisterAccelerator(); - delete m_pScript; } const QString & KviKvsAction::scriptCode() { - return m_pScript->code(); + return m_szScript; } void KviKvsAction::activate() { - // at the moment it executes externally! - // FIXME! if(!isEnabled())return; // no way - m_pScript->run(g_pActiveWindow); // FIXME: complain more in case of error ? + KviKvsScript::run(m_szScript,g_pActiveWindow); } diff --git a/src/kvirc/kvs/kvi_kvs_action.h b/src/kvirc/kvs/kvi_kvs_action.h index 17cdff297..e75ced9bd 100644 --- a/src/kvirc/kvs/kvi_kvs_action.h +++ b/src/kvirc/kvs/kvi_kvs_action.h @@ -29,13 +29,11 @@ class KviKvsScript; -#define KVI_KVS_ACTION_SCRIPT_NAME_PREFIX "action::" - class KVIRC_API KviKvsAction : public KviAction { Q_OBJECT protected: - KviKvsScript * m_pScript; + QString m_szScript; public: KviKvsAction(QObject * pParent, const QString &szName, diff --git a/src/kvirc/kvs/kvi_kvs_useraction.cpp b/src/kvirc/kvs/kvi_kvs_useraction.cpp index e37895aef..f5e89d436 100644 --- a/src/kvirc/kvs/kvi_kvs_useraction.cpp +++ b/src/kvirc/kvs/kvi_kvs_useraction.cpp @@ -248,10 +248,7 @@ bool KviKvsUserAction::load(KviConfig * cfg) QString szCode = cfg->readQStringEntry("Code"); if(szCode.isEmpty())return false; - if(m_pScript)delete m_pScript; - QString tmp = KVI_KVS_ACTION_SCRIPT_NAME_PREFIX; - tmp += m_szName; - m_pScript = new KviKvsScript(tmp,szCode); + m_szScript = QString(szCode); return true; } @@ -269,5 +266,5 @@ void KviKvsUserAction::save(KviConfig * cfg) if(!m_szCategory.isEmpty())cfg->writeEntry("Category",m_szCategory); if(!m_szKeySequence.isEmpty())cfg->writeEntry("KeySequence",m_szKeySequence); if(m_uFlags != 0)cfg->writeEntry("Flags",m_uFlags); - cfg->writeEntry("Code",m_pScript->code()); + cfg->writeEntry("Code",m_szScript); } diff --git a/src/modules/help/helpwindow.cpp b/src/modules/help/helpwindow.cpp index abc3b24f1..e4cb8f26b 100644 --- a/src/modules/help/helpwindow.cpp +++ b/src/modules/help/helpwindow.cpp @@ -51,6 +51,7 @@ KviHelpWindow::KviHelpWindow(KviFrame * lpFrm,const char * name) { if(!g_bIndexingDone) { + g_bIndexingDone=TRUE; QString szDoclist,szDict; g_pApp->getLocalKvircDirectory(szDoclist,KviApp::Help,"help.doclist." KVI_SOURCES_DATE); @@ -62,7 +63,6 @@ KviHelpWindow::KviHelpWindow(KviFrame * lpFrm,const char * name) g_pDocIndex->makeIndex(); g_pDocIndex->writeDict(); } - g_bIndexingDone=TRUE; } g_pHelpWindowList->append(this); |
