1
0
mirror of https://github.com/moparisthebest/hexchat synced 2024-11-29 04:32:15 -05:00

python: Hold a reference to plugin instead of dereferencing hook to get to it.

hook might have been free'd by the callback via hexchat.unhook().
This commit is contained in:
Arnavion 2013-05-14 01:23:46 -07:00
parent 631664645d
commit 5c9652bf13

View File

@ -498,18 +498,20 @@ Callback_Command(char *word[], char *word_eol[], void *userdata)
PyObject *retobj; PyObject *retobj;
PyObject *word_list, *word_eol_list; PyObject *word_list, *word_eol_list;
int ret = 0; int ret = 0;
PyObject *plugin;
BEGIN_PLUGIN(hook->plugin); plugin = hook->plugin;
BEGIN_PLUGIN(plugin);
word_list = Util_BuildList(word+1); word_list = Util_BuildList(word+1);
if (word_list == NULL) { if (word_list == NULL) {
END_PLUGIN(hook->plugin); END_PLUGIN(plugin);
return 0; return 0;
} }
word_eol_list = Util_BuildList(word_eol+1); word_eol_list = Util_BuildList(word_eol+1);
if (word_eol_list == NULL) { if (word_eol_list == NULL) {
Py_DECREF(word_list); Py_DECREF(word_list);
END_PLUGIN(hook->plugin); END_PLUGIN(plugin);
return 0; return 0;
} }
@ -528,7 +530,7 @@ Callback_Command(char *word[], char *word_eol[], void *userdata)
PyErr_Print(); PyErr_Print();
} }
END_PLUGIN(hook->plugin); END_PLUGIN(plugin);
return ret; return ret;
} }
@ -548,6 +550,7 @@ Callback_Print(char *word[], void *userdata)
int next = 0; int next = 0;
int i; int i;
int ret = 0; int ret = 0;
PyObject *plugin;
/* Cut off the message identifier. */ /* Cut off the message identifier. */
word += 1; word += 1;
@ -579,13 +582,14 @@ Callback_Print(char *word[], void *userdata)
} }
word_eol[i] = ""; word_eol[i] = "";
BEGIN_PLUGIN(hook->plugin); plugin = hook->plugin;
BEGIN_PLUGIN(plugin);
word_list = Util_BuildList(word); word_list = Util_BuildList(word);
if (word_list == NULL) { if (word_list == NULL) {
g_free(word_eol_raw); g_free(word_eol_raw);
g_free(word_eol); g_free(word_eol);
END_PLUGIN(hook->plugin); END_PLUGIN(plugin);
return 0; return 0;
} }
word_eol_list = Util_BuildList(word_eol); word_eol_list = Util_BuildList(word_eol);
@ -593,7 +597,7 @@ Callback_Print(char *word[], void *userdata)
g_free(word_eol_raw); g_free(word_eol_raw);
g_free(word_eol); g_free(word_eol);
Py_DECREF(word_list); Py_DECREF(word_list);
END_PLUGIN(hook->plugin); END_PLUGIN(plugin);
return 0; return 0;
} }
@ -614,7 +618,7 @@ Callback_Print(char *word[], void *userdata)
PyErr_Print(); PyErr_Print();
} }
END_PLUGIN(hook->plugin); END_PLUGIN(plugin);
return ret; return ret;
} }