This file is indexed.

/usr/include/parrot/6.6.0/parrot/thr_windows.h is in libparrot-dev 6.6.0-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* thread.h
 *  Copyright (C) 2001-2003, Parrot Foundation.
 *  Overview:
 *     This is the api header for the windows thread primitives
 *  Data Structure and Algorithms:
 *  History:
 *  Notes:
 *  References:
 */

#ifndef PARROT_THR_WINDOWS_H_GUARD
#define PARROT_THR_WINDOWS_H_GUARD

#  undef FASTCALL
#  define WIN32_LEAN_AND_MEAN
#  include <windows.h>
#  include <process.h>
#  include <limits.h>
#  undef CONST

typedef CRITICAL_SECTION Parrot_mutex;
typedef struct Windows_cond {
    HANDLE m_hSema;
    LONG m_lWaiters;
} Parrot_cond;
typedef HANDLE Parrot_thread;

#  define MUTEX_INIT(m) InitializeCriticalSectionAndSpinCount((PCRITICAL_SECTION)&(m), 4000)
#  define MUTEX_DESTROY(m) DeleteCriticalSection((PCRITICAL_SECTION)&(m))

#  define COND_INIT(c) \
     do { \
       (c).m_hSema = CreateSemaphore(NULL, 0, LONG_MAX, NULL); \
       (c).m_lWaiters = 0; \
     } while (0)

#  define COND_DESTROY(c) CloseHandle((c).m_hSema)

#  define LOCK(m) EnterCriticalSection((PCRITICAL_SECTION)&(m))
#  define UNLOCK(m) LeaveCriticalSection((PCRITICAL_SECTION)&(m))

#  define COND_WAIT(c, m) \
     do { \
       ++(c).m_lWaiters; \
       UNLOCK(m); \
       WaitForSingleObject((c).m_hSema, INFINITE); \
       LOCK(m); \
       --(c).m_lWaiters; \
     } while (0)

#  define COND_TIMED_WAIT(c, m, t, rc) \
     do { \
       FLOATVAL now; \
       time_t sec; \
       LONG nsec; \
       DWORD diff; \
       now = Parrot_floatval_time(); \
       sec = (time_t)now; \
       nsec = (LONG)((now - sec)*1000.0f)*1000000L; \
       if ((t)->tv_sec > sec || ((t)->tv_sec == sec && (t)->tv_nsec > nsec)) \
       { \
         ++(c).m_lWaiters; \
         UNLOCK(m); \
         diff = (DWORD)(((t)->tv_sec - sec)*1000L + ((t)->tv_nsec - nsec)/1000000L); \
         (rc) = WaitForSingleObject((c).m_hSema, diff) != WAIT_OBJECT_0; \
         LOCK(m); \
         --(c).m_lWaiters; \
       } \
       else { \
         (rc) = 1; \
       } \
     } while (0)

#  define COND_SIGNAL(c) \
     do { \
       if ((c).m_lWaiters > 0) \
         ReleaseSemaphore((c).m_hSema, 1, NULL); \
     } while (0)

#  define COND_BROADCAST(c) \
     do { \
       if ((c).m_lWaiters > 0) \
         ReleaseSemaphore((c).m_hSema, (c).m_lWaiters, NULL); \
     } while (0)

#  define JOIN(t, ret) \
     do { \
       WaitForSingleObject((t), INFINITE); \
       GetExitCodeThread((t), (LPDWORD)&(ret)); \
       CloseHandle(t); \
     } while (0)

#  define DETACH(t) CloseHandle(t)

/* If the compiler CRT library has a good _beginthreadXX() routine, use it instead of
   the Win32 API CreateThread(). _beginthreadXX guards call to the thread start routine
   with SEH to implement runtime errors and signal support. Also it frees calloc-ed
   per-thread data block at exit */
#ifdef _MCS_VER1
#  define THREAD_CREATE_JOINABLE(t, func, arg) \
       do { \
         unsigned tid; \
         (t) = (HANDLE)_beginthreadex(NULL, 0, unsigned (__stdcall * (func)) (void*), \
                                     (void*)(arg), 0, &tid); \
       } while (0)
#else
#  define THREAD_CREATE_JOINABLE(t, func, arg) \
       do { \
         DWORD tid; \
         (t) = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(func), (PVOID)(arg), 0, &tid); \
       } while (0)
#endif

#  define THREAD_CREATE_DETACHED(t, func, arg) \
     do { \
       THREAD_CREATE_JOINABLE((t), (func), (arg)); \
       DETACH(t); \
     } while (0)

#  define CLEANUP_PUSH(f, a)
#  define CLEANUP_POP(a)

typedef void (*Cleanup_Handler)(void *);

#endif /* PARROT_THR_WINDOWS_H_GUARD */

/*
 * Local variables:
 *   c-file-style: "parrot"
 * End:
 * vim: expandtab shiftwidth=4 cinoptions='\:2=2' :
 */