Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #ifndef prtpool_h___
7 : #define prtpool_h___
8 :
9 : #include "prtypes.h"
10 : #include "prthread.h"
11 : #include "prio.h"
12 : #include "prerror.h"
13 :
14 : /*
15 : * NOTE:
16 : * THIS API IS A PRELIMINARY VERSION IN NSPR 4.0 AND IS SUBJECT TO
17 : * CHANGE
18 : */
19 :
20 : PR_BEGIN_EXTERN_C
21 :
22 : typedef struct PRJobIoDesc {
23 : PRFileDesc *socket;
24 : PRErrorCode error;
25 : PRIntervalTime timeout;
26 : } PRJobIoDesc;
27 :
28 : typedef struct PRThreadPool PRThreadPool;
29 : typedef struct PRJob PRJob;
30 : typedef void (PR_CALLBACK *PRJobFn) (void *arg);
31 :
32 : /* Create thread pool */
33 : NSPR_API(PRThreadPool *)
34 0 : PR_CreateThreadPool(PRInt32 initial_threads, PRInt32 max_threads,
35 : PRUint32 stacksize);
36 :
37 : /* queue a job */
38 : NSPR_API(PRJob *)
39 0 : PR_QueueJob(PRThreadPool *tpool, PRJobFn fn, void *arg, PRBool joinable);
40 :
41 : /* queue a job, when a socket is readable */
42 : NSPR_API(PRJob *)
43 0 : PR_QueueJob_Read(PRThreadPool *tpool, PRJobIoDesc *iod,
44 : PRJobFn fn, void * arg, PRBool joinable);
45 :
46 : /* queue a job, when a socket is writeable */
47 : NSPR_API(PRJob *)
48 0 : PR_QueueJob_Write(PRThreadPool *tpool, PRJobIoDesc *iod,
49 : PRJobFn fn, void * arg, PRBool joinable);
50 :
51 : /* queue a job, when a socket has a pending connection */
52 : NSPR_API(PRJob *)
53 0 : PR_QueueJob_Accept(PRThreadPool *tpool, PRJobIoDesc *iod,
54 : PRJobFn fn, void * arg, PRBool joinable);
55 :
56 : /* queue a job, when the socket connection to addr succeeds or fails */
57 : NSPR_API(PRJob *)
58 0 : PR_QueueJob_Connect(PRThreadPool *tpool, PRJobIoDesc *iod,
59 : const PRNetAddr *addr, PRJobFn fn, void * arg, PRBool joinable);
60 :
61 : /* queue a job, when a timer exipres */
62 : NSPR_API(PRJob *)
63 0 : PR_QueueJob_Timer(PRThreadPool *tpool, PRIntervalTime timeout,
64 : PRJobFn fn, void * arg, PRBool joinable);
65 : /* cancel a job */
66 : NSPR_API(PRStatus)
67 0 : PR_CancelJob(PRJob *job);
68 :
69 : /* join a job */
70 : NSPR_API(PRStatus)
71 0 : PR_JoinJob(PRJob *job);
72 :
73 : /* shutdown pool */
74 : NSPR_API(PRStatus)
75 0 : PR_ShutdownThreadPool(PRThreadPool *tpool);
76 :
77 : /* join pool, wait for exit of all threads */
78 : NSPR_API(PRStatus)
79 0 : PR_JoinThreadPool(PRThreadPool *tpool);
80 :
81 : PR_END_EXTERN_C
82 :
83 : #endif /* prtpool_h___ */
|