use separate queue for external datagrams to avoid corrupting master::queue
This commit is contained in:
parent
783bc19600
commit
997c81b6fa
|
|
@ -77,7 +77,9 @@ typedef enum {
|
||||||
/** EtherCAT datagram.
|
/** EtherCAT datagram.
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
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. */
|
struct list_head sent; /**< Master list item for sent datagrams. */
|
||||||
ec_device_index_t device_index; /**< Device via which the datagram shall
|
ec_device_index_t device_index; /**< Device via which the datagram shall
|
||||||
be / was sent. */
|
be / was sent. */
|
||||||
|
|
|
||||||
|
|
@ -971,7 +971,7 @@ void ec_master_queue_datagram_ext(
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
down(&master->ext_queue_sem);
|
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);
|
up(&master->ext_queue_sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2525,8 +2525,8 @@ int ecrt_master_send_ext(ec_master_t *master)
|
||||||
|
|
||||||
down(&master->ext_queue_sem);
|
down(&master->ext_queue_sem);
|
||||||
list_for_each_entry_safe(datagram, next, &master->ext_datagram_queue,
|
list_for_each_entry_safe(datagram, next, &master->ext_datagram_queue,
|
||||||
queue) {
|
ext_queue) {
|
||||||
list_del(&datagram->queue);
|
list_del_init(&datagram->ext_queue);
|
||||||
ec_master_queue_datagram(master, datagram);
|
ec_master_queue_datagram(master, datagram);
|
||||||
}
|
}
|
||||||
up(&master->ext_queue_sem);
|
up(&master->ext_queue_sem);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue