mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-02-06 03:41:52 +08:00
use separate queue for external datagrams to avoid corrupting master::queue
This commit is contained in:
@@ -77,7 +77,9 @@ typedef enum {
|
||||
/** EtherCAT datagram.
|
||||
*/
|
||||
typedef struct {
|
||||
struct list_head queue; /**< Master datagram queue item. */
|
||||
struct list_head queue; /**< Master datagram queue item,
|
||||
protected by user-supplied mutex. */
|
||||
struct list_head ext_queue; /**< External datagram queue item, protected by ext_queue_sem. */
|
||||
struct list_head sent; /**< Master list item for sent datagrams. */
|
||||
ec_device_index_t device_index; /**< Device via which the datagram shall
|
||||
be / was sent. */
|
||||
|
||||
@@ -971,7 +971,7 @@ void ec_master_queue_datagram_ext(
|
||||
)
|
||||
{
|
||||
down(&master->ext_queue_sem);
|
||||
list_add_tail(&datagram->queue, &master->ext_datagram_queue);
|
||||
list_add_tail(&datagram->ext_queue, &master->ext_datagram_queue);
|
||||
up(&master->ext_queue_sem);
|
||||
}
|
||||
|
||||
@@ -2525,8 +2525,8 @@ int ecrt_master_send_ext(ec_master_t *master)
|
||||
|
||||
down(&master->ext_queue_sem);
|
||||
list_for_each_entry_safe(datagram, next, &master->ext_datagram_queue,
|
||||
queue) {
|
||||
list_del(&datagram->queue);
|
||||
ext_queue) {
|
||||
list_del_init(&datagram->ext_queue);
|
||||
ec_master_queue_datagram(master, datagram);
|
||||
}
|
||||
up(&master->ext_queue_sem);
|
||||
|
||||
Reference in New Issue
Block a user