summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDukePyrolator <DukePyrolator@anope.org>2012-10-21 18:29:10 +0200
committerDukePyrolator <DukePyrolator@anope.org>2012-10-21 18:29:10 +0200
commitd5b2f9cfa78ed176ffe1d9f2923799fdd37217a5 (patch)
tree7ecc83981ccbe416438d73a52fdee23b91f4484f
parent727c3d5b7513a909038553a227552a33dc52d885 (diff)
Base has to destruct before Extensible does because objects that destruct due to Extensible destructing don't have their references to the already destroyed object for Base invalidated. (fixed for NickAlias and NickCore)
-rw-r--r--include/account.h6
-rw-r--r--src/nickalias.cpp2
-rw-r--r--src/nickcore.cpp2
3 files changed, 6 insertions, 4 deletions
diff --git a/include/account.h b/include/account.h
index 19b7729d3..7879a578e 100644
--- a/include/account.h
+++ b/include/account.h
@@ -109,7 +109,8 @@ const Anope::string NickCoreFlagStrings[] = {
"MEMO_MAIL", "HIDE_STATUS", "SUSPENDED", "AUTOOP", "FORBIDDEN", "UNCONFIRMED", "STATS", ""
};
-class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_END>, public Serializable
+/* It matters that Base is here before Extensible (it is inherited by Serializable) */
+class CoreExport NickAlias : public Serializable, public Extensible, public Flags<NickNameFlag, NS_END>
{
Anope::string vhost_ident, vhost_host, vhost_creator;
time_t vhost_created;
@@ -187,7 +188,8 @@ class CoreExport NickAlias : public Extensible, public Flags<NickNameFlag, NS_EN
time_t GetVhostCreated() const;
};
-class CoreExport NickCore : public Extensible, public Flags<NickCoreFlag, NI_END>, public Serializable
+/* It matters that Base is here before Extensible (it is inherited by Serializable) */
+class CoreExport NickCore : public Serializable, public Extensible, public Flags<NickCoreFlag, NI_END>
{
public:
/** Default constructor
diff --git a/src/nickalias.cpp b/src/nickalias.cpp
index 3137a827a..801a79d05 100644
--- a/src/nickalias.cpp
+++ b/src/nickalias.cpp
@@ -29,7 +29,7 @@ static nickservheld_map NickServHelds;
* @param nick The nick
* @param nickcore The nickcore for this nick
*/
-NickAlias::NickAlias(const Anope::string &nickname, NickCore* nickcore) : Flags<NickNameFlag, NS_END>(NickNameFlagStrings), Serializable("NickAlias")
+NickAlias::NickAlias(const Anope::string &nickname, NickCore* nickcore) : Serializable("NickAlias"), Flags<NickNameFlag, NS_END>(NickNameFlagStrings)
{
if (nickname.empty())
throw CoreException("Empty nick passed to NickAlias constructor");
diff --git a/src/nickcore.cpp b/src/nickcore.cpp
index 4c3a774b1..5d9950a4e 100644
--- a/src/nickcore.cpp
+++ b/src/nickcore.cpp
@@ -19,7 +19,7 @@ serialize_checker<nickcore_map> NickCoreList("NickCore");
/** Default constructor
* @param display The display nick
*/
-NickCore::NickCore(const Anope::string &coredisplay) : Flags<NickCoreFlag, NI_END>(NickCoreFlagStrings), Serializable("NickCore")
+NickCore::NickCore(const Anope::string &coredisplay) : Serializable("NickCore"), Flags<NickCoreFlag, NI_END>(NickCoreFlagStrings)
{
if (coredisplay.empty())
throw CoreException("Empty display passed to NickCore constructor");