Remove qoslock
Creating a reader/writer in a listener for a built-in topic (as ddsperf does) recursively ends up in reader/writer matching, recursively read-locking qoslock. As nobody ever takes a write-lock, it is a non-issue provided the rwlock really is an rwlock. On Solaris 2.6 those don't exist, and mapping it onto a mutex deadlocks. This commit removes the thing in its entirety, the fact that it is currently only ever locked for reading is hint that perhaps it is not that valuable a thing. The way it was used in the code would in any case not have helped with re-matching on QoS changes (save for duplicating all the matching code), and it is doubtful that serializing the matching in that case would be necessary in the first place. Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
		
							parent
							
								
									96e09d2d4e
								
							
						
					
					
						commit
						47920df65c
					
				
					 3 changed files with 0 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -195,10 +195,6 @@ struct q_globals {
 | 
			
		|||
  struct addrset *as_disc;
 | 
			
		||||
  struct addrset *as_disc_group;
 | 
			
		||||
 | 
			
		||||
  /* qoslock serializes QoS changes, probably not strictly necessary,
 | 
			
		||||
     but a lot more straightforward that way */
 | 
			
		||||
  ddsrt_rwlock_t qoslock;
 | 
			
		||||
 | 
			
		||||
  ddsrt_mutex_t lock;
 | 
			
		||||
 | 
			
		||||
  /* Receive thread. (We can only has one for now, cos of the signal
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1294,7 +1294,6 @@ void rebuild_or_clear_writer_addrsets(int rebuild)
 | 
			
		|||
  struct addrset *empty = rebuild ? NULL : new_addrset();
 | 
			
		||||
  DDS_LOG(DDS_LC_DISCOVERY, "rebuild_or_delete_writer_addrsets(%d)\n", rebuild);
 | 
			
		||||
  ephash_enum_writer_init (&est);
 | 
			
		||||
  ddsrt_rwlock_read (&gv.qoslock);
 | 
			
		||||
  while ((wr = ephash_enum_writer_next (&est)) != NULL)
 | 
			
		||||
  {
 | 
			
		||||
    ddsrt_mutex_lock (&wr->e.lock);
 | 
			
		||||
| 
						 | 
				
			
			@ -1318,7 +1317,6 @@ void rebuild_or_clear_writer_addrsets(int rebuild)
 | 
			
		|||
    }
 | 
			
		||||
    ddsrt_mutex_unlock (&wr->e.lock);
 | 
			
		||||
  }
 | 
			
		||||
  ddsrt_rwlock_unlock (&gv.qoslock);
 | 
			
		||||
  ephash_enum_writer_fini (&est);
 | 
			
		||||
  unref_addrset(empty);
 | 
			
		||||
  DDS_LOG(DDS_LC_DISCOVERY, "rebuild_or_delete_writer_addrsets(%d) done\n", rebuild);
 | 
			
		||||
| 
						 | 
				
			
			@ -2334,10 +2332,8 @@ static void generic_do_match (struct entity_common *e, nn_mtime_t tnow)
 | 
			
		|||
     enumerating), but we may visit a single proxy reader multiple
 | 
			
		||||
     times. */
 | 
			
		||||
    ephash_enum_init (&est, mkind);
 | 
			
		||||
    ddsrt_rwlock_read (&gv.qoslock);
 | 
			
		||||
    while ((em = ephash_enum_next (&est)) != NULL)
 | 
			
		||||
      generic_do_match_connect(e, em, tnow);
 | 
			
		||||
    ddsrt_rwlock_unlock (&gv.qoslock);
 | 
			
		||||
    ephash_enum_fini (&est);
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
| 
						 | 
				
			
			@ -2386,10 +2382,8 @@ static void generic_do_local_match (struct entity_common *e, nn_mtime_t tnow)
 | 
			
		|||
     enumerating), but we may visit a single proxy reader multiple
 | 
			
		||||
     times. */
 | 
			
		||||
  ephash_enum_init (&est, mkind);
 | 
			
		||||
  ddsrt_rwlock_read (&gv.qoslock);
 | 
			
		||||
  while ((em = ephash_enum_next (&est)) != NULL)
 | 
			
		||||
    generic_do_local_match_connect(e, em, tnow);
 | 
			
		||||
  ddsrt_rwlock_unlock (&gv.qoslock);
 | 
			
		||||
  ephash_enum_fini (&est);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1253,7 +1253,6 @@ int rtps_init (void)
 | 
			
		|||
  gv.gcreq_queue = gcreq_queue_new ();
 | 
			
		||||
 | 
			
		||||
  ddsrt_atomic_st32 (&gv.rtps_keepgoing, 1);
 | 
			
		||||
  ddsrt_rwlock_init (&gv.qoslock);
 | 
			
		||||
 | 
			
		||||
  if (config.xpack_send_async)
 | 
			
		||||
  {
 | 
			
		||||
| 
						 | 
				
			
			@ -1645,7 +1644,6 @@ void rtps_fini (void)
 | 
			
		|||
  nn_plist_fini (&gv.default_plist_pp);
 | 
			
		||||
 | 
			
		||||
  ddsrt_mutex_destroy (&gv.lock);
 | 
			
		||||
  ddsrt_rwlock_destroy (&gv.qoslock);
 | 
			
		||||
 | 
			
		||||
  while (gv.recvips)
 | 
			
		||||
  {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue