@@ -95,7 +95,7 @@ int aeron_ipc_publication_create(
95
95
_pub -> conductor_fields .subscribeable .array = NULL ;
96
96
_pub -> conductor_fields .subscribeable .length = 0 ;
97
97
_pub -> conductor_fields .subscribeable .capacity = 0 ;
98
- _pub -> conductor_fields .subscribeable .add_position_hook_func = aeron_ipc_publication_add_subscriber_hook ;
98
+ _pub -> conductor_fields .subscribeable .add_position_hook_func = aeron_driver_subscribeable_null_hook ;
99
99
_pub -> conductor_fields .subscribeable .remove_position_hook_func = aeron_ipc_publication_remove_subscriber_hook ;
100
100
_pub -> conductor_fields .subscribeable .clientd = _pub ;
101
101
_pub -> conductor_fields .managed_resource .registration_id = registration_id ;
@@ -238,10 +238,12 @@ void aeron_ipc_publication_decref(void *clientd)
238
238
239
239
void aeron_ipc_publication_check_for_blocked_publisher (aeron_ipc_publication_t * publication , int64_t now_ns )
240
240
{
241
- if (publication -> conductor_fields .consumer_position == publication -> conductor_fields .last_consumer_position )
241
+ int64_t consumer_position = publication -> conductor_fields .consumer_position ;
242
+
243
+ if (consumer_position == publication -> conductor_fields .last_consumer_position &&
244
+ aeron_ipc_publication_producer_position (publication ) > consumer_position )
242
245
{
243
- if (now_ns > (publication -> conductor_fields .time_of_last_consumer_position_change + publication -> unblock_timeout_ns ) &&
244
- aeron_ipc_publication_producer_position (publication ) > publication -> conductor_fields .consumer_position )
246
+ if (now_ns > (publication -> conductor_fields .time_of_last_consumer_position_change + publication -> unblock_timeout_ns ))
245
247
{
246
248
if (aeron_logbuffer_unblocker_unblock (
247
249
publication -> mapped_raw_log .term_buffers ,
@@ -259,7 +261,6 @@ void aeron_ipc_publication_check_for_blocked_publisher(aeron_ipc_publication_t *
259
261
}
260
262
}
261
263
262
- extern void aeron_ipc_publication_add_subscriber_hook (void * clientd , int64_t * value_addr );
263
264
extern void aeron_ipc_publication_remove_subscriber_hook (void * clientd , int64_t * value_addr );
264
265
extern int64_t aeron_ipc_publication_producer_position (aeron_ipc_publication_t * publication );
265
266
extern int64_t aeron_ipc_publication_joining_position (aeron_ipc_publication_t * publication );
0 commit comments