~ubuntu-branches/ubuntu/raring/pthreads-win32/raring-proposed

« back to all changes in this revision

Viewing changes to .pc/fix-pid_t.patch/sched_setscheduler.c

  • Committer: Package Import Robot
  • Author(s): Stephen Kitt
  • Date: 2012-08-20 08:22:05 UTC
  • Revision ID: package-import@ubuntu.com-20120820082205-0qenriq46lhrlopg
Tags: 2.9.1+dfsg-1
Initial release (Closes: #685545).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * sched_setscheduler.c
 
3
 * 
 
4
 * Description:
 
5
 * POSIX thread functions that deal with thread scheduling.
 
6
 *
 
7
 * --------------------------------------------------------------------------
 
8
 *
 
9
 *      Pthreads-win32 - POSIX Threads Library for Win32
 
10
 *      Copyright(C) 1998 John E. Bossom
 
11
 *      Copyright(C) 1999,2005 Pthreads-win32 contributors
 
12
 * 
 
13
 *      Contact Email: rpj@callisto.canberra.edu.au
 
14
 * 
 
15
 *      The current list of contributors is contained
 
16
 *      in the file CONTRIBUTORS included with the source
 
17
 *      code distribution. The list can also be seen at the
 
18
 *      following World Wide Web location:
 
19
 *      http://sources.redhat.com/pthreads-win32/contributors.html
 
20
 * 
 
21
 *      This library is free software; you can redistribute it and/or
 
22
 *      modify it under the terms of the GNU Lesser General Public
 
23
 *      License as published by the Free Software Foundation; either
 
24
 *      version 2 of the License, or (at your option) any later version.
 
25
 * 
 
26
 *      This library is distributed in the hope that it will be useful,
 
27
 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 
28
 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
29
 *      Lesser General Public License for more details.
 
30
 * 
 
31
 *      You should have received a copy of the GNU Lesser General Public
 
32
 *      License along with this library in the file COPYING.LIB;
 
33
 *      if not, write to the Free Software Foundation, Inc.,
 
34
 *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
35
 */
 
36
 
 
37
#include "pthread.h"
 
38
#include "implement.h"
 
39
#include "sched.h"
 
40
 
 
41
int
 
42
sched_setscheduler (pid_t pid, int policy)
 
43
{
 
44
  /*
 
45
   * Win32 only has one policy which we call SCHED_OTHER.
 
46
   * However, we try to provide other valid side-effects
 
47
   * such as EPERM and ESRCH errors. Choosing to check
 
48
   * for a valid policy last allows us to get the most value out
 
49
   * of this function.
 
50
   */
 
51
  if (0 != pid)
 
52
    {
 
53
      int selfPid = (int) GetCurrentProcessId ();
 
54
 
 
55
      if (pid != selfPid)
 
56
        {
 
57
          HANDLE h =
 
58
            OpenProcess (PROCESS_SET_INFORMATION, PTW32_FALSE, (DWORD) pid);
 
59
 
 
60
          if (NULL == h)
 
61
            {
 
62
              errno =
 
63
                (GetLastError () ==
 
64
                 (0xFF & ERROR_ACCESS_DENIED)) ? EPERM : ESRCH;
 
65
              return -1;
 
66
            }
 
67
          else
 
68
            CloseHandle(h);
 
69
        }
 
70
    }
 
71
 
 
72
  if (SCHED_OTHER != policy)
 
73
    {
 
74
      errno = ENOSYS;
 
75
      return -1;
 
76
    }
 
77
 
 
78
  /*
 
79
   * Don't set anything because there is nothing to set.
 
80
   * Just return the current (the only possible) value.
 
81
   */
 
82
  return SCHED_OTHER;
 
83
}