From: Levi D. B. <ld...@pu...> - 2004-12-06 01:41:43
|
On Sunday 28 November 2004 4:15 pm, Robert Jonsson wrote: > * Made some changes to how threads are created, for systems > where thread creation has been erratic, linux2.6 in various > configurations. On my kernel 2.4.26 system, I get the following on startup: set realtime scheduler: Invalid argument midi thread 26436 _NOT_ running SCHED_FIFO In muse/midiseq.cpp, when it attempts to change the scheduling priority, it tries setting it to 0. This I think is the problem. I manually set it to 1, and it appears to have successfully set the scheduling priority/policy. Then I found something a little better (but still seems a bit odd setting it as low as possible...) void MidiSeq::threadStart(void*) { struct sched_param rt_param; memset(&rt_param, 0, sizeof(rt_param)); if (prio == 0) prio = sched_get_priority_min(SCHED_FIFO); printf("scheduling priority set to %d\n", prio); rt_param.sched_priority = prio; int rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); if (rv != 0) perror("set realtime scheduler"); int policy; if ((policy = sched_getscheduler (0)) < 0) { printf("Cannot get current client scheduler: %s\n", strerror(errno)); } if (policy != SCHED_FIFO) printf("midi thread %d _NOT_ running SCHED_FIFO\n", getpid()); updatePollFd(); } Notice the call to sched_get_priority_min(SCHED_FIFO). This is the output when I run muse now: [root@x1-6-00-a0-cc-e5-08-b1 muse]# ./muse DEBUG: connecting to `default' server no locale <muse_en_US>/</usr/share/muse/locale> scheduling priority set to 1 So, it appears to not like the priority of 0. -- Levi D. Burton http://www.puresimplicity.net/~ldb/ |