@@ -1112,6 +1112,8 @@ qd_message_t *qd_message(void)
1112
1112
1113
1113
ZERO (msg -> content );
1114
1114
sys_mutex_init (& msg -> content -> lock );
1115
+ sys_mutex_init (& msg -> content -> producer_activation_lock );
1116
+ sys_mutex_init (& msg -> content -> consumer_activation_lock );
1115
1117
sys_atomic_init (& msg -> content -> aborted , 0 );
1116
1118
sys_atomic_init (& msg -> content -> discard , 0 );
1117
1119
sys_atomic_init (& msg -> content -> no_body , 0 );
@@ -1196,6 +1198,8 @@ void qd_message_free(qd_message_t *in_msg)
1196
1198
qd_buffer_free (content -> pending );
1197
1199
1198
1200
sys_mutex_free (& content -> lock );
1201
+ sys_mutex_free (& content -> consumer_activation_lock );
1202
+ sys_mutex_free (& content -> producer_activation_lock );
1199
1203
sys_atomic_destroy (& content -> aborted );
1200
1204
sys_atomic_destroy (& content -> discard );
1201
1205
sys_atomic_destroy (& content -> no_body );
@@ -1602,11 +1606,11 @@ bool qd_message_has_data_in_content_or_pending_buffers(qd_message_t *msg)
1602
1606
static inline void activate_message_consumer (qd_message_t * stream )
1603
1607
{
1604
1608
qd_message_content_t * content = MSG_CONTENT (stream );
1605
- LOCK (& content -> lock );
1609
+ LOCK (& content -> consumer_activation_lock );
1606
1610
if (content -> uct_consumer_activation .type != QD_ACTIVATION_NONE ) {
1607
1611
cutthrough_notify_buffers_produced_inbound (& content -> uct_consumer_activation );
1608
1612
}
1609
- UNLOCK (& content -> lock );
1613
+ UNLOCK (& content -> consumer_activation_lock );
1610
1614
}
1611
1615
1612
1616
@@ -1616,11 +1620,11 @@ static inline void activate_message_producer(qd_message_t *stream)
1616
1620
1617
1621
uint32_t full_slots = (sys_atomic_get (& content -> uct_produce_slot ) - sys_atomic_get (& content -> uct_consume_slot )) % UCT_SLOT_COUNT ;
1618
1622
if (full_slots < UCT_RESUME_THRESHOLD ) {
1619
- LOCK (& content -> lock );
1623
+ LOCK (& content -> producer_activation_lock );
1620
1624
if (content -> uct_producer_activation .type != QD_ACTIVATION_NONE ) {
1621
1625
cutthrough_notify_buffers_consumed_outbound (& content -> uct_producer_activation );
1622
1626
}
1623
- UNLOCK (& content -> lock );
1627
+ UNLOCK (& content -> producer_activation_lock );
1624
1628
}
1625
1629
}
1626
1630
@@ -3008,32 +3012,32 @@ int qd_message_consume_buffers(qd_message_t *stream, qd_buffer_list_t *buffers,
3008
3012
void qd_message_set_consumer_activation (qd_message_t * stream , qd_message_activation_t * activation )
3009
3013
{
3010
3014
qd_message_content_t * content = MSG_CONTENT (stream );
3011
- LOCK (& content -> lock );
3015
+ LOCK (& content -> consumer_activation_lock );
3012
3016
content -> uct_consumer_activation = * activation ;
3013
- UNLOCK (& content -> lock );
3017
+ UNLOCK (& content -> consumer_activation_lock );
3014
3018
}
3015
3019
3016
3020
3017
3021
void qd_message_cancel_consumer_activation (qd_message_t * stream )
3018
3022
{
3019
3023
qd_message_content_t * content = MSG_CONTENT (stream );
3020
- LOCK (& content -> lock );
3024
+ LOCK (& content -> consumer_activation_lock );
3021
3025
content -> uct_consumer_activation .type = QD_ACTIVATION_NONE ;
3022
- UNLOCK (& content -> lock );
3026
+ UNLOCK (& content -> consumer_activation_lock );
3023
3027
}
3024
3028
3025
3029
void qd_message_set_producer_activation (qd_message_t * stream , qd_message_activation_t * activation )
3026
3030
{
3027
3031
qd_message_content_t * content = MSG_CONTENT (stream );
3028
- LOCK (& content -> lock );
3032
+ LOCK (& content -> producer_activation_lock );
3029
3033
content -> uct_producer_activation = * activation ;
3030
- UNLOCK (& content -> lock );
3034
+ UNLOCK (& content -> producer_activation_lock );
3031
3035
}
3032
3036
3033
3037
void qd_message_cancel_producer_activation (qd_message_t * stream )
3034
3038
{
3035
3039
qd_message_content_t * content = MSG_CONTENT (stream );
3036
- LOCK (& content -> lock );
3040
+ LOCK (& content -> producer_activation_lock );
3037
3041
content -> uct_producer_activation .type = QD_ACTIVATION_NONE ;
3038
- UNLOCK (& content -> lock );
3042
+ UNLOCK (& content -> producer_activation_lock );
3039
3043
}
0 commit comments