mirror of
				https://gitlab.labs.nic.cz/labs/bird.git
				synced 2024-05-11 16:54:54 +00:00 
			
		
		
		
	Object locks use events
Instead of calling custom hooks from object locks, we use standard event sending mechanism to inform protocols about object lock changes. As event sending is lockless, the unlocking protocol simply enqueues the appropriate event to the given loop when the locking is done.
This commit is contained in:
		| @@ -1528,9 +1528,9 @@ bgp_feed_end(struct channel *C) | ||||
|  | ||||
|  | ||||
| static void | ||||
| bgp_start_locked(struct object_lock *lock) | ||||
| bgp_start_locked(void *_p) | ||||
| { | ||||
|   struct bgp_proto *p = lock->data; | ||||
|   struct bgp_proto *p = _p; | ||||
|   const struct bgp_config *cf = p->cf; | ||||
|  | ||||
|   if (p->p.proto_state != PS_START) | ||||
| @@ -1637,8 +1637,11 @@ bgp_start(struct proto *P) | ||||
|   lock->iface = p->cf->iface; | ||||
|   lock->vrf = p->cf->iface ? NULL : p->p.vrf; | ||||
|   lock->type = OBJLOCK_TCP; | ||||
|   lock->hook = bgp_start_locked; | ||||
|   lock->data = p; | ||||
|   lock->event = (event) { | ||||
|     .hook = bgp_start_locked, | ||||
|     .data = p, | ||||
|   }; | ||||
|   lock->target = &global_event_list; | ||||
|  | ||||
|   /* For dynamic BGP, we use inst 1 to avoid collisions with regular BGP */ | ||||
|   if (bgp_is_dynamic(p)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user