diff --git a/src/mod/languages/mod_managed/managed/ManagedSession.cs b/src/mod/languages/mod_managed/managed/ManagedSession.cs
index 9629215c70..bed7a03878 100644
--- a/src/mod/languages/mod_managed/managed/ManagedSession.cs
+++ b/src/mod/languages/mod_managed/managed/ManagedSession.cs
@@ -139,16 +139,13 @@ namespace FreeSWITCH.Native
// The delegate needs to be stored so it doesn't get GC'd, so we can't just return GetFunctionPointerForDelegate right away.
/// Wraps a nice handler into a delegate suitable for reverse P/Invoke. This only currently works well for hangup/reporting handlers.
- public static switch_state_handler_t_delegate CreateStateHandlerDelegate(Action handler) {
+ public static switch_state_handler_t_delegate CreateStateHandlerDelegate(ManagedSession sess, Action handler)
+ {
// We create a ManagedSession on top of the session so callbacks can use it "nicely"
// Then we sort of dispose it.
switch_state_handler_t_delegate del = ptr => {
- using (var sess = new ManagedSession(new SWIGTYPE_p_switch_core_session(ptr, false))) {
handler(sess);
- sess.SetAutoHangup(false);
- sess.destroy();
return switch_status_t.SWITCH_STATUS_SUCCESS;
- }
};
return del;
}
@@ -187,7 +184,7 @@ namespace FreeSWITCH.Native
var bleg = new ManagedSession();
bleg.originate_ondestroy_delegate = bleg.originate_ondestroy_method;
- bleg.originate_onhangup_delegate = CreateStateHandlerDelegate(sess_b => {
+ bleg.originate_onhangup_delegate = CreateStateHandlerDelegate(bleg, sess_b => {
if (onHangup != null) {
onHangup(sess_b);
}