51 #ifndef _TIMEZONE_DEFINED
57 int gettimeofday(
struct timeval *tv,
struct timezone *tz);
60 #include <sys/param.h>
62 #if defined(__APPLE__) || defined(__NetBSD__)
63 #include <sys/resource.h>
72 #define JOBFREELISTSIZE 100
74 #define INFINITE_THREADS -1
76 #define EMAXTHREADS (-8 & 1<<29)
79 #define INVALID_POLICY (-9 & 1<<29)
82 #define INVALID_JOB_ID (-2 & 1<<29)
84 typedef enum duration {
89 typedef enum priority {
96 #define DEFAULT_PRIORITY MED_PRIORITY
99 #define DEFAULT_MIN_THREADS 1
102 #define DEFAULT_MAX_THREADS 10
105 #define DEFAULT_STACK_SIZE 0u
108 #define DEFAULT_JOBS_PER_THREAD 10
111 #define DEFAULT_STARVATION_TIME 500
114 #define DEFAULT_IDLE_TIME 10 * 1000
117 #define DEFAULT_FREE_ROUTINE NULL
120 #define DEFAULT_MAX_JOBS_TOTAL 100
133 typedef int PolicyType;
135 #define DEFAULT_POLICY SCHED_OTHER
171 struct timeval requestTime;
172 ThreadPriority priority;
188 double totalWorkTime;
189 double totalIdleTime;
192 int persistentThreads;
389 ThreadPriority priority);
487 PolicyType schedPolicy);
int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal)
Sets the maximum number jobs that can be qeued totally.
Definition: ThreadPool.c:1165
int persistentThreads
Definition: ThreadPool.h:234
int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out)
Gets the current set of attributes associated with the thread pool.
Definition: ThreadPool.c:919
int shutdown
Definition: ThreadPool.h:226
int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority)
Sets the max threads for the thread pool attributes.
Definition: ThreadPool.c:1078
Definition: ThreadPool.h:143
struct THREADPOOLJOB ThreadPoolJob
int starvationTime
Definition: ThreadPool.h:160
int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg)
Initializes thread pool job. Sets the priority to default defined in ThreadPool.h. Sets the free_routine to default defined in ThreadPool.h.
Definition: ThreadPool.c:1066
PolicyType schedPolicy
Definition: ThreadPool.h:162
int maxIdleTime
Definition: ThreadPool.h:153
ithread_cond_t condition
Definition: ThreadPool.h:220
Definition: ThreadPool.h:177
int ThreadPoolAddPersistent(ThreadPool *tp, ThreadPoolJob *job, int *jobId)
Adds a persistent job to the thread pool.
Definition: ThreadPool.c:763
int lastJobId
Definition: ThreadPool.h:224
LinkedList lowJobQ
Definition: ThreadPool.h:238
int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread)
Sets the jobs per thread ratio.
Definition: ThreadPool.c:1138
struct TPOOLSTATS ThreadPoolStats
struct THREADPOOL ThreadPool
A thread pool similar to the thread pool in the UPnP SDK.
void(* free_routine)(void *arg)
Definition: ThreadPool.h:138
int totalThreads
Definition: ThreadPool.h:228
EXPORT_SPEC int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats)
Returns various statistics about the thread pool.
Definition: ThreadPool.c:1196
A thread pool similar to the thread pool in the UPnP SDK.
Definition: ThreadPool.h:215
int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr)
Sets the attributes for the thread pool. Only affects future calculations.
Definition: ThreadPool.c:932
int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads)
Sets the min threads for the thread pool attributes.
Definition: ThreadPool.c:1111
int maxThreads
Definition: ThreadPool.h:148
ThreadPoolJob * persistentJob
Definition: ThreadPool.h:244
int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime)
Sets the idle time for the thread pool attributes.
Definition: ThreadPool.c:1129
int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr)
Initializes and starts ThreadPool. Must be called first and only once for ThreadPool.
Definition: ThreadPool.c:695
ithread_mutex_t mutex
Definition: ThreadPool.h:218
Provides a platform independent way to include TCP/IP types and functions.
int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime)
Sets the starvation time for the thread pool attributes.
Definition: ThreadPool.c:1147
FreeList jobFreeList
Definition: ThreadPool.h:236
Definition: FreeList.h:61
int maxJobsTotal
Definition: ThreadPool.h:157
ThreadPoolStats stats
Definition: ThreadPool.h:248
LinkedList medJobQ
Definition: ThreadPool.h:240
int ThreadPoolAdd(ThreadPool *tp, ThreadPoolJob *job, int *jobId)
Adds a job to the thread pool. Job will be run as soon as possible.
Definition: ThreadPool.c:811
int TPAttrSetStackSize(ThreadPoolAttr *attr, size_t stackSize)
Sets the stack size for the thread pool attributes.
Definition: ThreadPool.c:1120
Definition: ThreadPool.h:166
int busyThreads
Definition: ThreadPool.h:232
LinkedList highJobQ
Definition: ThreadPool.h:242
size_t stackSize
Definition: ThreadPool.h:150
int minThreads
Definition: ThreadPool.h:146
int ThreadPoolShutdown(ThreadPool *tp)
Shuts the thread pool down. Waits for all threads to finish. May block indefinitely if jobs do not ex...
Definition: ThreadPool.c:973
int pendingWorkerThreadStart
Definition: ThreadPool.h:230
ithread_cond_t start_and_shutdown
Definition: ThreadPool.h:222
int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy)
Sets the scheduling policy for the thread pool attributes.
Definition: ThreadPool.c:1156
int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads)
Sets the max threads for the thread pool attributes.
Definition: ThreadPool.c:1102
ThreadPoolAttr attr
Definition: ThreadPool.h:246
struct THREADPOOLATTR ThreadPoolAttr
int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func)
Sets the max threads for the thread pool attributes.
Definition: ThreadPool.c:1093
#define UPNP_INLINE
Declares an inline function.
Definition: UpnpGlobal.h:103
int ThreadPoolRemove(ThreadPool *tp, int jobId, ThreadPoolJob *out)
Removes a job from the thread pool. Can only remove jobs which are not currently running.
Definition: ThreadPool.c:862
#define EXPORT_SPEC
Export functions on WIN32 DLLs.
Definition: UpnpGlobal.h:91
int TPAttrInit(ThreadPoolAttr *attr)
Initializes thread pool attributes. Sets values to defaults defined in ThreadPool.h.
Definition: ThreadPool.c:1050
Definition: LinkedList.h:83
Defines constants that for some reason are not defined on some systems.
EXPORT_SPEC void ThreadPoolPrintStats(ThreadPoolStats *stats)
Definition: ThreadPool.c:1175
int jobsPerThread
Definition: ThreadPool.h:155