Module: xenomai-3
Branch: wip/rtnet-fixes
Commit: c9abd205d6b5c9e96e2c4bd9445aee65dd9d992e
URL:    
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=c9abd205d6b5c9e96e2c4bd9445aee65dd9d992e

Author: Philippe Gerum <r...@xenomai.org>
Date:   Mon Feb  5 17:35:20 2018 +0100

net/stack: restore original deletion sequence for service tasks

Restore the original sequence for deleting an internal service task
that should most likely be waiting for an input event: first destroy
the event resourcen, which should trigger immediate return from the
wait call with -EIDRM, then send a cancellation request via
rtdm_task_destroy() for good measure to exit the work loop if the task
was not aslept on that event.

This obviously assumes that all callers waiting for events do check
for the return value, as they must do.

---

 kernel/drivers/net/addons/proxy.c                  |    2 +-
 kernel/drivers/net/stack/rtcfg/rtcfg_frame.c       |    4 ++--
 kernel/drivers/net/stack/rtmac/nomac/nomac_proto.c |    2 +-
 kernel/drivers/net/stack/rtnet_rtpc.c              |    2 +-
 kernel/drivers/net/stack/stack_mgr.c               |    2 +-
 5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/kernel/drivers/net/addons/proxy.c 
b/kernel/drivers/net/addons/proxy.c
index 5805475..a43bf12 100644
--- a/kernel/drivers/net/addons/proxy.c
+++ b/kernel/drivers/net/addons/proxy.c
@@ -420,8 +420,8 @@ static void __exit rtnetproxy_cleanup_module(void)
     unregister_netdev(dev_rtnetproxy);
     free_netdev(dev_rtnetproxy);
 
-    rtdm_task_destroy(&rtnetproxy_tx_task);
     rtdm_event_destroy(&rtnetproxy_tx_event);
+    rtdm_task_destroy(&rtnetproxy_tx_task);
 
     /* free the non-real-time signal */
     rtdm_nrtsig_destroy(&rtnetproxy_rx_signal);
diff --git a/kernel/drivers/net/stack/rtcfg/rtcfg_frame.c 
b/kernel/drivers/net/stack/rtcfg/rtcfg_frame.c
index f80a579..8e2306a 100644
--- a/kernel/drivers/net/stack/rtcfg/rtcfg_frame.c
+++ b/kernel/drivers/net/stack/rtcfg/rtcfg_frame.c
@@ -567,8 +567,8 @@ int __init rtcfg_init_frames(void)
     return 0;
 
   error2:
-    rtdm_task_destroy(&rx_task);
     rtdm_event_destroy(&rx_event);
+    rtdm_task_destroy(&rx_task);
 
   error1:
     rtskb_pool_release(&rtcfg_pool);
@@ -585,8 +585,8 @@ void rtcfg_cleanup_frames(void)
 
     rtdev_remove_pack(&rtcfg_packet_type);
 
-    rtdm_task_destroy(&rx_task);
     rtdm_event_destroy(&rx_event);
+    rtdm_task_destroy(&rx_task);
 
     while ((rtskb = rtskb_dequeue(&rx_queue)) != NULL) {
        kfree_rtskb(rtskb);
diff --git a/kernel/drivers/net/stack/rtmac/nomac/nomac_proto.c 
b/kernel/drivers/net/stack/rtmac/nomac/nomac_proto.c
index df916fa..a8fefff 100644
--- a/kernel/drivers/net/stack/rtmac/nomac/nomac_proto.c
+++ b/kernel/drivers/net/stack/rtmac/nomac/nomac_proto.c
@@ -138,6 +138,6 @@ int __init nomac_proto_init(void)
 
 void nomac_proto_cleanup(void)
 {
-    rtdm_task_destroy(&wrapper_task);
     rtdm_event_destroy(&wakeup_sem);
+    rtdm_task_destroy(&wrapper_task);
 }
diff --git a/kernel/drivers/net/stack/rtnet_rtpc.c 
b/kernel/drivers/net/stack/rtnet_rtpc.c
index c99f4f0..ad1cfcc 100644
--- a/kernel/drivers/net/stack/rtnet_rtpc.c
+++ b/kernel/drivers/net/stack/rtnet_rtpc.c
@@ -270,8 +270,8 @@ int __init rtpc_init(void)
 
 void rtpc_cleanup(void)
 {
-    rtdm_task_destroy(&dispatch_task);
     rtdm_event_destroy(&dispatch_event);
+    rtdm_task_destroy(&dispatch_task);
     rtdm_nrtsig_destroy(&rtpc_nrt_signal);
 }
 
diff --git a/kernel/drivers/net/stack/stack_mgr.c 
b/kernel/drivers/net/stack/stack_mgr.c
index b71e261..51cf933 100644
--- a/kernel/drivers/net/stack/stack_mgr.c
+++ b/kernel/drivers/net/stack/stack_mgr.c
@@ -261,6 +261,6 @@ int rt_stack_mgr_init (struct rtnet_mgr *mgr)
  */
 void rt_stack_mgr_delete (struct rtnet_mgr *mgr)
 {
-    rtdm_task_destroy(&mgr->task);
     rtdm_event_destroy(&mgr->event);
+    rtdm_task_destroy(&mgr->task);
 }


_______________________________________________
Xenomai-git mailing list
Xenomai-git@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai-git

Reply via email to