// The delegate needs to be stored so it doesn't get GC'd, so we can't just return GetFunctionPointerForDelegate right away.\r
\r
/// <summary>Wraps a nice handler into a delegate suitable for reverse P/Invoke. This only currently works well for hangup/reporting handlers.</summary>\r
- public static switch_state_handler_t_delegate CreateStateHandlerDelegate(Action<ManagedSession> handler) {\r
+ public static switch_state_handler_t_delegate CreateStateHandlerDelegate(ManagedSession sess, Action<ManagedSession> handler)\r
+ {\r
// We create a ManagedSession on top of the session so callbacks can use it "nicely"\r
// Then we sort of dispose it.\r
switch_state_handler_t_delegate del = ptr => {\r
- using (var sess = new ManagedSession(new SWIGTYPE_p_switch_core_session(ptr, false))) {\r
handler(sess);\r
- sess.SetAutoHangup(false);\r
- sess.destroy();\r
return switch_status_t.SWITCH_STATUS_SUCCESS;\r
- }\r
};\r
return del;\r
}\r
var bleg = new ManagedSession();\r
\r
bleg.originate_ondestroy_delegate = bleg.originate_ondestroy_method;\r
- bleg.originate_onhangup_delegate = CreateStateHandlerDelegate(sess_b => {\r
+ bleg.originate_onhangup_delegate = CreateStateHandlerDelegate(bleg, sess_b => {\r
if (onHangup != null) {\r
onHangup(sess_b);\r
}\r