aboutsummaryrefslogtreecommitdiffstats
path: root/lib/wx/c_src/wxe_events.h
diff options
context:
space:
mode:
authorDan Gudmundsson <[email protected]>2013-10-30 16:46:54 +0100
committerDan Gudmundsson <[email protected]>2013-10-30 16:46:54 +0100
commitc054ac3d4df7fe8b2f58204e677f275bd8f0e60c (patch)
tree178e2dd83ca426d08d767be91a664b2bf6153e25 /lib/wx/c_src/wxe_events.h
parent1d7472911e14e4885c9111aa21fc201c397be20f (diff)
downloadotp-c054ac3d4df7fe8b2f58204e677f275bd8f0e60c.tar.gz
otp-c054ac3d4df7fe8b2f58204e677f275bd8f0e60c.tar.bz2
otp-c054ac3d4df7fe8b2f58204e677f275bd8f0e60c.zip
wx: Fix cleanup of event handlers
Event handlers was not removed after objects/process had been delete/died, which causes memory leakage and that fun's was kept in the wx_server process. Code that might be purged and the server died.
Diffstat (limited to 'lib/wx/c_src/wxe_events.h')
-rw-r--r--lib/wx/c_src/wxe_events.h39
1 files changed, 19 insertions, 20 deletions
diff --git a/lib/wx/c_src/wxe_events.h b/lib/wx/c_src/wxe_events.h
index 6bbb0dfa13..718e0ad120 100644
--- a/lib/wx/c_src/wxe_events.h
+++ b/lib/wx/c_src/wxe_events.h
@@ -30,6 +30,20 @@ public:
int cID;
};
+/* One EvtListener per listening erlang process */
+/* If callbacks are used the receiver is wxe_master process */
+/* and a wxeEvtListener pre callback is registered */
+class wxeEvtListener : public wxEvtHandler
+{
+ public:
+ wxeEvtListener(ErlDrvTermData Thisport) : port(Thisport)
+ {}
+ // {fprintf(stderr, "Creating %x\r\n", (unsigned int) this); fflush(stderr);}
+ ~wxeEvtListener() {}
+ void forward(wxEvent& event);
+ ErlDrvTermData port;
+};
+
void initEventTable();
int wxeEventTypeFromAtom(char *etype_atom);
@@ -37,32 +51,17 @@ int wxeEventTypeFromAtom(char *etype_atom);
class wxeCallbackData : public wxObject
{
public:
- wxeCallbackData(ErlDrvTermData caller, void *req, char *req_type,
- int funcb, int skip_ev, wxeErlTerm * userData);
+ wxeCallbackData(ErlDrvTermData caller, int req, char *req_type,
+ int funcb, int skip_ev, wxeErlTerm * userData,
+ wxeEvtListener *handler_cb);
~wxeCallbackData();
+ wxeEvtListener * handler;
ErlDrvTermData listener;
int fun_id;
- void * obj;
+ int obj;
char class_name[40];
int skip;
wxeErlTerm * user_data;
};
-/* One EvtListener per listening erlang process */
-/* If callbacks are used the receiver is wxe_master process */
-/* and a wxeEvtListener pre callback is registered */
-class wxeEvtListener : public wxEvtHandler
-{
-public:
- wxeEvtListener(ErlDrvTermData Thisport) : port(Thisport)
- {}
- // {fprintf(stderr, "Creating %x\r\n", (unsigned int) this); fflush(stderr);}
- void forward(wxEvent& event);
- ~wxeEvtListener() {
- ((WxeApp *)wxTheApp)->clearPtr(this);
- // fprintf(stderr, "Deleteing %x\r\n", (unsigned int) this); fflush(stderr);
- };
- ErlDrvTermData port;
-};
-
#endif