aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Fabio Bas2010-01-13 22:32:43 +0000
committerGravatar Fabio Bas2010-01-13 22:32:43 +0000
commitb01ceb835c17faa9e327b593ef143be111e93633 (patch)
treea0032fa0fc747147f5e276e56e09c28196dcc105 /src
parentAdd names for mdichild objects (diff)
downloadKVIrc-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.cpp11
-rw-r--r--src/kvirc/kvs/kvi_kvs_action.h4
-rw-r--r--src/kvirc/kvs/kvi_kvs_useraction.cpp7
-rw-r--r--src/modules/help/helpwindow.cpp2
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);