Skip to content

Commit 3b9b637

Browse files
author
John Haley
committed
Clean up creation/deletion of global payloads
1 parent 99f9fda commit 3b9b637

2 files changed

Lines changed: 27 additions & 21 deletions

File tree

generate/templates/partials/async_function.cc

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ NAN_METHOD({{ cppClassName }}::{{ cppFunctionName }}) {
2525
{%elsif arg.isCallbackFunction %}
2626
if (!args[{{ arg.jsArg }}]->IsFunction()) {
2727
baton->{{ arg.name }} = NULL;
28+
{%if arg.payload.globalPayload %}
29+
globalPayload->{{ arg.name }} = NULL;
30+
{%else%}
2831
baton->{{ arg.payload.name }} = NULL;
32+
{%endif%}
2933
}
3034
else {
3135
baton->{{ arg.name}} = {{ cppFunctionName }}_{{ arg.name }}_cppCallback;
@@ -150,12 +154,7 @@ void {{ cppClassName }}::{{ cppFunctionName }}Worker::HandleOKCallback() {
150154
delete baton->{{ arg.payload.name }};
151155
{%endif%}
152156
{%elsif arg.globalPayload %}
153-
{%each args|argsInfo as cbArg %}
154-
{%if cbArg.isCallbackFunction %}
155-
delete (({{ cppFunctionName}}_globalPayload*)baton->{{ arg.name }})->{{ cbArg.name }};
156-
{%endif%}
157-
{%endeach%}
158-
free((void *)baton->{{ arg.name }});
157+
delete ({{ cppFunctionName}}_globalPayload*)baton->{{ arg.name }};
159158
{%else%}
160159
free((void*)baton->{{ arg.name }});
161160
{%endif%}
@@ -180,22 +179,11 @@ void {{ cppClassName }}::{{ cppFunctionName }}Worker::HandleOKCallback() {
180179
free((void *)baton->{{ arg.name }});
181180
}
182181
{%elsif arg.isCallbackFunction %}
183-
{%if arg.payload.globalPayload %}
184-
{%each args|argsInfo as cbArg %}
185-
{%if cbArg.isCallbackFunction %}
186-
delete (({{ cppFunctionName }}_globalPayload*)baton->{{ arg.name }})->{{ cbArg.name }};
187-
{%endif%}
188-
{%endeach%}
189-
{%else%}
190-
delete (NanCallback *)baton->{{ arg.payload.name }};
182+
{%if not arg.payload.globalPayload %}
183+
delete baton->{{ arg.payload.name }};
191184
{%endif%}
192185
{%elsif arg.globalPayload %}
193-
{%each args|argsInfo as cbArg %}
194-
{%if cbArg.isCallbackFunction %}
195-
delete (({{ cppFunctionName}}_globalPayload*)baton->{{ arg.name }})->{{ cbArg.name }};
196-
{%endif%}
197-
{%endeach%}
198-
free((void *)baton->{{ arg.name }});
186+
delete ({{ cppFunctionName}}_globalPayload*)baton->{{ arg.name }};
199187
{%endif%}
200188
{%endeach%}
201189

generate/templates/templates/class_header.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,27 @@ class {{ cppClassName }} : public ObjectWrap {
146146
struct {{ function.cppFunctionName }}_globalPayload {
147147
{%each function.args as arg %}
148148
{%if arg.isCallbackFunction %}
149-
NanCallback * {{ arg.name }};
149+
NanCallback * {{ arg.name }};
150150
{%endif%}
151151
{%endeach%}
152+
153+
{{ function.cppFunctionName }}_globalPayload() {
154+
{%each function.args as arg %}
155+
{%if arg.isCallbackFunction %}
156+
{{ arg.name }} = NULL;
157+
{%endif%}
158+
{%endeach%}
159+
}
160+
161+
~{{ function.cppFunctionName }}_globalPayload() {
162+
{%each function.args as arg %}
163+
{%if arg.isCallbackFunction %}
164+
if ({{ arg.name }} != NULL) {
165+
delete {{ arg.name }};
166+
}
167+
{%endif%}
168+
{%endeach%}
169+
}
152170
};
153171
{%endif%}
154172
{%endeach%}

0 commit comments

Comments
 (0)