| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -112,6 +112,7 @@ static void *ckmsg_queue(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						pthread_detach(pthread_self()); | 
					 | 
					 | 
					 | 
						pthread_detach(pthread_self()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						rename_proc(ckmsgq->name); | 
					 | 
					 | 
					 | 
						rename_proc(ckmsgq->name); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						ckmsgq->active = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						while (42) { | 
					 | 
					 | 
					 | 
						while (42) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							ckmsg_t *msg; | 
					 | 
					 | 
					 | 
							ckmsg_t *msg; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -181,8 +182,18 @@ ckmsgq_t *create_ckmsgqs(ckpool_t *ckp, const char *name, const void *func, cons | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 * ckmsgq parsing thread(s) to wake up and process it. */ | 
					 | 
					 | 
					 | 
					 * ckmsgq parsing thread(s) to wake up and process it. */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					void ckmsgq_add(ckmsgq_t *ckmsgq, void *data) | 
					 | 
					 | 
					 | 
					void ckmsgq_add(ckmsgq_t *ckmsgq, void *data) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ckmsg_t *msg = ckalloc(sizeof(ckmsg_t)); | 
					 | 
					 | 
					 | 
						ckmsg_t *msg; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (unlikely(!ckmsgq)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							/* Discard data if we're unlucky enough to be sending it to
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							 * msg queues not set up during start up */ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							free(data); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							return; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						while (unlikely(!ckmsgq->active)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							cksleep_ms(10); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						msg = ckalloc(sizeof(ckmsg_t)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						msg->data = data; | 
					 | 
					 | 
					 | 
						msg->data = data; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						mutex_lock(ckmsgq->lock); | 
					 | 
					 | 
					 | 
						mutex_lock(ckmsgq->lock); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -197,11 +208,14 @@ bool ckmsgq_empty(ckmsgq_t *ckmsgq) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						bool ret = true; | 
					 | 
					 | 
					 | 
						bool ret = true; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
						if (unlikely(!ckmsgq || !ckmsgq->active)) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
							goto out; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						mutex_lock(ckmsgq->lock); | 
					 | 
					 | 
					 | 
						mutex_lock(ckmsgq->lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						if (ckmsgq->msgs) | 
					 | 
					 | 
					 | 
						if (ckmsgq->msgs) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							ret = (ckmsgq->msgs->next == ckmsgq->msgs->prev); | 
					 | 
					 | 
					 | 
							ret = (ckmsgq->msgs->next == ckmsgq->msgs->prev); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						mutex_unlock(ckmsgq->lock); | 
					 | 
					 | 
					 | 
						mutex_unlock(ckmsgq->lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					out: | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						return ret; | 
					 | 
					 | 
					 | 
						return ret; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |