Skip to content

Commit 97e3b80

Browse files
authored
Merge pull request #44 from DevelappersGmbH/master
fixing unexpected release of native callbacks
2 parents 057e6ec + e78f173 commit 97e3b80

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

.editorconfig

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# top-most EditorConfig file
2+
root = true
3+
4+
[*.cs]
5+
indent_style = tab

WkHtmlToXSharp/WkHtmlToPdfConverter.cs

+17-10
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ public sealed class WkHtmlToPdfConverter : IHtmlToPdfConverter
5353
private StringBuilder _errorString = null;
5454
private int _currentPhase = 0;
5555
private bool _disposed = false;
56+
57+
// keeping class level references to callback functions will prevent garbage collecting them
58+
private NativeCalls.wkhtmltopdf_str_callback _errorCallback = null;
59+
private NativeCalls.wkhtmltopdf_str_callback _warnCallback = null;
60+
private NativeCalls.wkhtmltopdf_void_callback _phaseCallback = null;
61+
private NativeCalls.wkhtmltopdf_int_callback _progressCallback = null;
62+
private NativeCalls.wkhtmltopdf_bool_callback _finishCallback = null;
5663
#endregion
5764

5865
#region Properties
@@ -277,11 +284,11 @@ private IntPtr _BuildConverter(IntPtr globalSettings, IntPtr objectSettings, str
277284
private byte[] _Convert(string inputHtml)
278285
{
279286
var converter = IntPtr.Zero;
280-
var errorCb = new NativeCalls.wkhtmltopdf_str_callback(OnError);
281-
var warnCb = new NativeCalls.wkhtmltopdf_str_callback(OnWarning);
282-
var phaseCb = new NativeCalls.wkhtmltopdf_void_callback(OnPhaseChanged);
283-
var progressCb = new NativeCalls.wkhtmltopdf_int_callback(OnProgressChanged);
284-
var finishCb = new NativeCalls.wkhtmltopdf_bool_callback(OnFinished);
287+
_errorCallback = OnError;
288+
_warnCallback = OnWarning;
289+
_phaseCallback = OnPhaseChanged;
290+
_progressCallback = OnProgressChanged;
291+
_finishCallback = OnFinished;
285292

286293
try
287294
{
@@ -292,11 +299,11 @@ private byte[] _Convert(string inputHtml)
292299

293300
_errorString = new StringBuilder();
294301

295-
NativeCalls.wkhtmltopdf_set_error_callback(converter, errorCb);
296-
NativeCalls.wkhtmltopdf_set_warning_callback(converter, warnCb);
297-
NativeCalls.wkhtmltopdf_set_phase_changed_callback(converter, phaseCb);
298-
NativeCalls.wkhtmltopdf_set_progress_changed_callback(converter, progressCb);
299-
NativeCalls.wkhtmltopdf_set_finished_callback(converter, finishCb);
302+
NativeCalls.wkhtmltopdf_set_error_callback(converter, _errorCallback);
303+
NativeCalls.wkhtmltopdf_set_warning_callback(converter, _warnCallback);
304+
NativeCalls.wkhtmltopdf_set_phase_changed_callback(converter, _phaseCallback);
305+
NativeCalls.wkhtmltopdf_set_progress_changed_callback(converter, _progressCallback);
306+
NativeCalls.wkhtmltopdf_set_finished_callback(converter, _finishCallback);
300307

301308
OnBegin(NativeCalls.wkhtmltopdf_phase_count(converter));
302309

0 commit comments

Comments
 (0)