17 typedef struct rpmsig_s * rpmsig;
21 typedef struct rpmsqElem * rpmsq;
24 * Default signal handler prototype.
25 * @param signum signal number
26 * @param info (siginfo_t) signal info
27 * @param context signal context
29 typedef void (*rpmsqAction_t) (int signum, void * info, void * context);
31 extern int _rpmsq_debug;
33 /* XXX make this fully opaque? */
34 #if defined(_RPMSQ_INTERNAL)
36 * SIGCHLD queue element.
39 struct rpmsqElem * q_forw; /*!< for use by insque(3)/remque(3). */
40 struct rpmsqElem * q_back;
41 pid_t child; /*!< Currently running child. */
42 volatile pid_t reaped; /*!< Reaped waitpid(3) return. */
43 volatile int status; /*!< Reaped waitpid(3) status. */
44 struct rpmop_s op; /*!< Scriptlet operation timestamp; */
45 rpmtime_t ms_scriptlets; /*!< Accumulated script duration (msecs). */
46 int reaper; /*!< Register SIGCHLD handler? */
47 int pipes[2]; /*!< Parent/child interlock. */
48 void * id; /*!< Blocking thread id (pthread_t). */
49 pthread_mutex_t mutex; /*!< Signal delivery to thread condvar. */
52 #endif /* _RPMSQ_INTERNAL */
54 extern sigset_t rpmsqCaught;
57 * Default signal handler.
58 * @param signum signal number
59 * @param info (siginfo_t) signal info
60 * @param context signal context
62 void rpmsqAction(int signum, void * info, void * context);
65 * Enable or disable a signal handler.
66 * @param signum signal to enable (or disable if negative)
67 * @param handler sa_sigaction handler (or NULL to use rpmsqHandler())
68 * @return no. of refs, -1 on error
70 int rpmsqEnable(int signum, rpmsqAction_t handler);
73 * Fork a child process.
74 * @param sq scriptlet queue element
77 pid_t rpmsqFork(rpmsq sq);
80 * Wait for child process to be reaped.
81 * @param sq scriptlet queue element
82 * @return reaped child pid
84 pid_t rpmsqWait(rpmsq sq);
87 * Call a function in a thread.
88 * @param start function
89 * @param arg function argument
90 * @return thread pointer (NULL on error)
92 void * rpmsqThread(void * (*start) (void * arg), void * arg);
95 * Wait for thread to terminate.
96 * @param thread thread
97 * @return 0 on success
99 int rpmsqJoin(void * thread);
102 * Compare thread with current thread.
103 * @param thread thread
104 * @return 0 if not equal
106 int rpmsqThreadEqual(void * thread);
109 * Execute a command, returning its status.
111 int rpmsqExecve (const char ** argv);