New submission from Charles-François Natali <neolo...@free.fr>:

http://www.python.org/dev/buildbot/all/builders/x86%20FreeBSD%206.4%203.x/builds/1734/steps/test/logs/stdio

"""
======================================================================
ERROR: test_get_and_set_scheduler_and_param (test.test_posix.PosixTester)
----------------------------------------------------------------------
Traceback (most recent call last):
  File 
"/usr/home/db3l/buildarea/3.x.bolen-freebsd/build/Lib/test/test_posix.py", line 
878, in test_get_and_set_scheduler_and_param
    posix.sched_setparam(0, param)
OSError: [Errno 22] Invalid argument

----------------------------------------------------------------------
"""

The reason is quite simple:

http://freebsd.active-venture.com/FreeBSD-srctree/newsrc/posix4/ksched.c.html

"""
/*
 * XXX About priorities
 *
 *      POSIX 1003.1b requires that numerically higher priorities be of
 *      higher priority.  It also permits sched_setparam to be
 *      implementation defined for SCHED_OTHER.  I don't like
 *      the notion of inverted priorites for normal processes when
 *  you can use "setpriority" for that.
 *
 *      I'm rejecting sched_setparam for SCHED_OTHER with EINVAL.
 */

[...]
int ksched_setparam(register_t *ret, struct ksched *ksched,
        struct proc *p, const struct sched_param *param)
{
        register_t policy;
        int e;

        e = getscheduler(&policy, ksched, p);

        if (e == 0)
        {
                if (policy == SCHED_OTHER)
                        e = EINVAL;
                else
                        e = ksched_setscheduler(ret, ksched, p, policy, param);
        }

        return e;
}

"""

And indeed, sched_setparam is implementation-defined if the process' scheduling 
policy is SCHED_OTHER, see 
http://pubs.opengroup.org/onlinepubs/007908799/xsh/sched_setparam.html
"""
If the current scheduling policy for the process specified by pid is not 
SCHED_FIFO or SCHED_RR, including SCHED_OTHER, the result is 
implementation-dependent.
"""

It seems that FreeBSD made the choice of returning EINVAL, but it changed in 
recent versions (the test passes on FreeBSD 8).

I'm not sure about the best solution though:
1) don't perform this test if the scheduling policy is not SCHED_RR or 
SCHED_FIFO
2) skip this test on FreeBSD versions that return EINVAL (maybe adding a new 
requires_freebsd_version to test.support)

----------
components: Tests
messages: 142423
nosy: benjamin.peterson, neologix
priority: normal
severity: normal
stage: needs patch
status: open
title: test_posix failure on FreeBSD 6.4: test_get_and_set_scheduler_and_param
type: behavior

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue12783>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to