Merge remote-tracking branch 'origin/API8' into tizen_6.0
authorTizenAPI-Bot <tizenapi@samsung.com>
Wed, 19 Apr 2023 02:32:34 +0000 (02:32 +0000)
committerTizenAPI-Bot <tizenapi@samsung.com>
Wed, 19 Apr 2023 02:32:34 +0000 (02:32 +0000)
1  2 
src/Tizen.NUI/src/public/Timer.cs

@@@ -120,22 -100,15 +112,27 @@@ namespace Tizen.NU
              }
              remove
              {
 +                if (Thread.CurrentThread.ManagedThreadId != 1)
 +                {
 +                    Tizen.Log.Error("NUI", "current threadID : " + Thread.CurrentThread.ManagedThreadId);
 +
 +                    StackTrace st = new StackTrace(true);
 +                    for (int i = 0; i < st.FrameCount; i++)
 +                    {
 +                        StackFrame sf = st.GetFrame(i);
 +                        Tizen.Log.Error("NUI", " Method " + sf.GetMethod());
 +                    }
 +                }
 +
                  _timerTickEventHandler -= value;
-                 if (_timerTickEventHandler == null && TickSignal().Empty() == false)
+                 if (_timerTickEventHandler == null && isTickSignalConnected)
                  {
-                     TickSignal().Disconnect(_timerTickCallbackOfNative);
+                     var signal = TickSignal();
+                     if (signal?.SwigCPtr.Handle == IntPtr.Zero) { signal = null; }
+                     signal?.Disconnect(_timerTickCallbackOfNative);
+                     signal?.Dispose();
+                     isTickSignalConnected = false;
+                     if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
                  }
              }
          }
          /// <since_tizen> 3 </since_tizen>
          protected override void Dispose(DisposeTypes type)
          {
 +            if (Thread.CurrentThread.ManagedThreadId != 1)
 +            {
 +                Tizen.Log.Error("NUI", "current threadID : " + Thread.CurrentThread.ManagedThreadId);
 +
 +                StackTrace st = new StackTrace(true);
 +                for (int i = 0; i < st.FrameCount; i++)
 +                {
 +                    StackFrame sf = st.GetFrame(i);
 +                    Tizen.Log.Error("NUI", " Method " + sf.GetMethod());
 +                }
 +            }
 +
              NUILog.Debug($"(0x{swigCPtr.Handle:X}) Timer.Dispose(type={type}, disposed={disposed})");
  
-             if (this != null && _timerTickCallbackDelegate != null)
+             if (this != null && _timerTickCallbackDelegate != null && isTickSignalConnected)
              {
-                 TickSignal().Disconnect(_timerTickCallbackOfNative);
+                 var signal = TickSignal();
+                 if (signal?.SwigCPtr.Handle == IntPtr.Zero) { signal = null; }
+                 signal?.Disconnect(_timerTickCallbackOfNative);
+                 signal?.Dispose();
+                 isTickSignalConnected = false;
+                 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
              }
  
              if (disposed)