sleepq_signal, sleepq_broadcast both take a "pri" argument. The man page says that if -1 is passed there will be no priority change, otherwise the pri value will set the priority of all threads being signaled to pri. However, if one looks at the code that uses the pri argument in sleepq_resume, the actual logic can be described by this sentence: "If pri is 0, the threads that are signaled will awake with priority unchanged. Otherwise, if a thread is in priority class TIMESHARE, and a thread has a lower TIMESHARE priority (larger value than pri) that thread's priority will be set to pri. pri must either be between MIN_PRI and MAX_PRI, or zero." I'd be happy if this simple fix to the document were made, and backported to 10.2 as well. Feel free to use the wording above.
Created attachment 228287 [details] sleepqueue(9) patch Improved description of thread priority on resume.