@@ -828,20 +828,27 @@ struct lwp_timer_event_param
828828 pid_t pid ;
829829 };
830830 int signo ;
831+ union sigval sigval ;
831832};
832833
833834static void _lwp_timer_event_from_tid (struct rt_work * work , void * param )
834835{
835836 rt_err_t ret ;
836837 struct lwp_timer_event_param * data = rt_container_of (work , struct lwp_timer_event_param , work );
837838 rt_thread_t thread ;
839+ lwp_siginfo_ext_t ext ;
838840
839841 RT_ASSERT (data -> tid );
840842
841843 /* stop others from delete thread */
842844 thread = lwp_tid_get_thread_and_inc_ref (data -> tid );
843845 /** The tid of thread is a READ ONLY value, but here still facing the risk of thread already been delete error */
844- ret = lwp_thread_signal_kill (thread , data -> signo , SI_TIMER , 0 );
846+ ext = rt_malloc (sizeof (struct lwp_siginfo_ext ));
847+ if (ext )
848+ {
849+ ext -> sigval = data -> sigval ;
850+ }
851+ ret = lwp_thread_signal_kill (thread , data -> signo , SI_TIMER , ext );
845852 lwp_tid_dec_ref (thread );
846853
847854 if (ret )
@@ -855,14 +862,19 @@ static void _lwp_timer_event_from_pid(struct rt_work *work, void *param)
855862 rt_err_t ret ;
856863 struct lwp_timer_event_param * data = rt_container_of (work , struct lwp_timer_event_param , work );
857864 struct rt_lwp * lwp ;
865+ lwp_siginfo_ext_t ext ;
858866
859867 lwp_pid_lock_take ();
860868 lwp = lwp_from_pid_locked (data -> pid );
861869 if (lwp )
862870 lwp_ref_inc (lwp );
863871 lwp_pid_lock_release ();
864-
865- ret = lwp_signal_kill (lwp , data -> signo , SI_TIMER , 0 );
872+ ext = rt_malloc (sizeof (struct lwp_siginfo_ext ));
873+ if (ext )
874+ {
875+ ext -> sigval = data -> sigval ;
876+ }
877+ ret = lwp_signal_kill (lwp , data -> signo , SI_TIMER , ext );
866878 if (lwp )
867879 lwp_ref_dec (lwp );
868880
@@ -907,6 +919,7 @@ static void rtthread_timer_wrapper(void *timerobj)
907919 int tid = * (int * )ptid ;
908920 struct lwp_timer_event_param * data = rt_container_of (timer -> work , struct lwp_timer_event_param , work );
909921 data -> signo = timer -> sigev_signo ;
922+ data -> sigval = timer -> val ;
910923
911924 if (!tid )
912925 {
0 commit comments