2 * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
4 * @APPLE_APACHE_LICENSE_HEADER_START@
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * @APPLE_APACHE_LICENSE_HEADER_END@
24 #include <sys/cdefs.h>
25 #include <sys/types.h>
26 #include <Availability.h>
28 #ifndef VPROC_HAS_TRANSACTIONS
29 #define VPROC_HAS_TRANSACTIONS
34 #pragma GCC visibility push(default)
36 typedef void * vproc_err_t
;
38 typedef struct vproc_s
* vproc_t
;
39 typedef void * vprocmgr_t
;
41 const char *vproc_strerror(vproc_err_t r
);
46 * Processes have two reference counts associated with them:
48 * Transactions Tracks unfinished work. For example: saving a modified
50 * Standby Tracks outstanding callbacks from external subsystems.
52 * Descriptive aliases:
54 * A process with no outstanding transactions is called "clean."
55 * A process with outstanding transactions is called "dirty."
56 * A process with no standby work is called "idle."
58 * Sometimes, the operating system needs processes to exit. Unix has two
59 * primary signals to kill applications:
61 * SIGKILL Not catchable by the application.
62 * SIGTERM Catchable by the application.
64 * If a process is clean, the operating system is free to SIGKILL it at
65 * shutdown or logout. This behavior is opt in.
67 * If a process is clean and idle, the operating system may send SIGKILL after
68 * a application specified timeout. This behavior is opt in.
70 * If a process is dirty and idle, the operating system may send SIGTERM after
71 * a application specified timeout. This behavior is opt in.
74 * launchd jobs should update their property lists accordingly.
76 * We plan to have LaunchServices use private methods to coordinate
77 * whether GUI applications have opted into this design.
81 * @typedef vproc_transaction_t
84 * An opaque handle used to track outstanding transactions.
86 typedef struct vproc_transaction_s
*vproc_transaction_t
;
89 * @function vproc_transaction_begin
92 * This is meant for future API improvements. Pass NULL for now.
95 * Returns an opaque handle to be passed to vproc_transaction_end().
98 * Call this API before creating data that needs to be saved via I/O later.
101 vproc_transaction_begin(vproc_t virtual_proc
) __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_5_0
);
104 * @function vproc_transaction_end
106 * @param virtual_proc
107 * This is meant for future API improvements. Pass NULL for now.
110 * The handle previously created with vproc_transaction_begin().
113 * Call this API after the data has either been flushed or otherwise resolved.
116 * Calling this API with the same handle more than once is undefined.
119 vproc_transaction_end(vproc_t virtual_proc
, vproc_transaction_t handle
) __OSX_AVAILABLE_STARTING(__MAC_10_6
, __IPHONE_5_0
);
122 * @typedef vproc_standby_t
125 * An opaque handle used to track outstanding standby requests.
127 typedef struct vproc_standby_s
*vproc_standby_t
;
130 * @function vproc_standby_begin
132 * @param virtual_proc
133 * This is meant for future API improvements. Pass NULL for now.
136 * Returns an opaque handle to be passed to vproc_standby_end().
139 * Call this API before registering notifications. For example: timers network
140 * state change, or when monitoring keyboard/mouse events.
143 * This API is undefined and is currently a no-op.
146 vproc_standby_begin(vproc_t virtual_proc
) __OSX_AVAILABLE_STARTING(__MAC_NA
, __IPHONE_NA
);
149 * @function vproc_standby_end
151 * @param virtual_proc
152 * This is meant for future API improvements. Pass NULL for now.
155 * The handle previously created with vproc_standby_begin().
158 * Call this API when deregistering notifications.
161 * Calling this API with the same handle more than once is undefined.
162 * This API is undefined and is currently a no-op.
165 vproc_standby_end(vproc_t virtual_proc
, vproc_standby_t handle
) __OSX_AVAILABLE_STARTING(__MAC_NA
, __IPHONE_NA
);
167 #pragma GCC visibility pop
171 #endif /* __VPROC_H__ */