|  |  |  | @ -1778,6 +1778,46 @@ static void set_icon(char *text) | 
			
		
	
		
			
				
					|  |  |  |  | 		fprintf(stdout, "\033]1;%s\007", text); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /*! \brief Set priority on all known threads. */ | 
			
		
	
		
			
				
					|  |  |  |  | static int set_priority_all(int pri) | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  | #if !defined(__linux__) | 
			
		
	
		
			
				
					|  |  |  |  | 	/* The non-linux version updates the entire process prio. */ | 
			
		
	
		
			
				
					|  |  |  |  | 	return ast_set_priority(pri); | 
			
		
	
		
			
				
					|  |  |  |  | #elif defined(LOW_MEMORY) | 
			
		
	
		
			
				
					|  |  |  |  | 	ast_log(LOG_WARNING, "Unable to enumerate all threads to update priority\n"); | 
			
		
	
		
			
				
					|  |  |  |  | 	return ast_set_priority(pri); | 
			
		
	
		
			
				
					|  |  |  |  | #else | 
			
		
	
		
			
				
					|  |  |  |  | 	struct thread_list_t *cur; | 
			
		
	
		
			
				
					|  |  |  |  | 	struct sched_param sched; | 
			
		
	
		
			
				
					|  |  |  |  | 	char const *policy_str; | 
			
		
	
		
			
				
					|  |  |  |  | 	int policy; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	memset(&sched, 0, sizeof(sched)); | 
			
		
	
		
			
				
					|  |  |  |  | 	if (pri) { | 
			
		
	
		
			
				
					|  |  |  |  | 		policy = SCHED_RR; | 
			
		
	
		
			
				
					|  |  |  |  | 		policy_str = "realtime"; | 
			
		
	
		
			
				
					|  |  |  |  | 		sched.sched_priority = 10; | 
			
		
	
		
			
				
					|  |  |  |  | 	} else { | 
			
		
	
		
			
				
					|  |  |  |  | 		policy = SCHED_OTHER; | 
			
		
	
		
			
				
					|  |  |  |  | 		policy_str = "regular"; | 
			
		
	
		
			
				
					|  |  |  |  | 		sched.sched_priority = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	if (sched_setscheduler(getpid(), policy, &sched)) { | 
			
		
	
		
			
				
					|  |  |  |  | 		ast_log(LOG_WARNING, "Unable to set %s thread priority on main thread\n", policy_str); | 
			
		
	
		
			
				
					|  |  |  |  | 		return -1; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	ast_verb(1, "Setting %s thread priority on all threads\n", policy_str); | 
			
		
	
		
			
				
					|  |  |  |  | 	AST_RWLIST_RDLOCK(&thread_list); | 
			
		
	
		
			
				
					|  |  |  |  | 	AST_RWLIST_TRAVERSE(&thread_list, cur, list) { | 
			
		
	
		
			
				
					|  |  |  |  | 		/* Don't care about the return value. It should work. */ | 
			
		
	
		
			
				
					|  |  |  |  | 		sched_setscheduler(cur->lwp, policy, &sched); | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	AST_RWLIST_UNLOCK(&thread_list); | 
			
		
	
		
			
				
					|  |  |  |  | 	return 0; | 
			
		
	
		
			
				
					|  |  |  |  | #endif | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | /*! \brief We set ourselves to a high priority, that we might pre-empt
 | 
			
		
	
		
			
				
					|  |  |  |  |  * everything else.  If your PBX has heavy activity on it, this is a | 
			
		
	
		
			
				
					|  |  |  |  |  * good thing. | 
			
		
	
	
		
			
				
					|  |  |  | @ -3744,7 +3784,7 @@ static void *canary_thread(void *unused) | 
			
		
	
		
			
				
					|  |  |  |  | 				"He's kicked the bucket.  He's shuffled off his mortal coil, " | 
			
		
	
		
			
				
					|  |  |  |  | 				"run down the curtain, and joined the bleeding choir invisible!!  " | 
			
		
	
		
			
				
					|  |  |  |  | 				"THIS is an EX-CANARY.  (Reducing priority)\n"); | 
			
		
	
		
			
				
					|  |  |  |  | 			ast_set_priority(0); | 
			
		
	
		
			
				
					|  |  |  |  | 			set_priority_all(0); | 
			
		
	
		
			
				
					|  |  |  |  | 			pthread_exit(NULL); | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |