11 #if defined(_RPMSQ_INTERNAL)
21 typedef struct rpmsig_s * rpmsig;
25 typedef struct rpmsqElem * rpmsq;
28 * Default signal handler prototype.
29 * @param signum signal number
30 * @param info (siginfo_t) signal info
31 * @param context signal context
34 typedef void (*rpmsqAction_t) (int signum, void * info, void * context);
36 typedef void (*rpmsqAction_t) (int signum);
39 extern int _rpmsq_debug;
41 /* XXX make this fully opaque? */
42 #if defined(_RPMSQ_INTERNAL)
44 * SIGCHLD queue element.
47 struct rpmsqElem * q_forw; /*!< for use by insque(3)/remque(3). */
48 struct rpmsqElem * q_back;
49 pid_t child; /*!< Currently running child. */
50 volatile pid_t reaped; /*!< Reaped waitpid(3) return. */
51 volatile int status; /*!< Reaped waitpid(3) status. */
52 struct rpmop_s op; /*!< Scriptlet operation timestamp; */
53 rpmtime_t ms_scriptlets; /*!< Accumulated script duration (msecs). */
54 int reaper; /*!< Register SIGCHLD handler? */
55 int pipes[2]; /*!< Parent/child interlock. */
56 void * id; /*!< Blocking thread id (pthread_t). */
57 pthread_mutex_t mutex; /*!< Signal delivery to thread condvar. */
60 #endif /* _RPMSQ_INTERNAL */
63 * Test if given signal has been caught (while signals blocked).
64 * Similar to sigismember() but operates on internal signal queue.
65 * @param signum signal to test for
66 * @return 1 if caught, 0 if not and -1 on error
68 int rpmsqIsCaught(int signum);
71 * Default signal handler.
72 * @param signum signal number
73 * @param info (siginfo_t) signal info
74 * @param context signal context
77 void rpmsqAction(int signum, void * info, void * context);
79 void rpmsqAction(int signum);
83 * Enable or disable a signal handler.
84 * @param signum signal to enable (or disable if negative)
85 * @param handler sa_sigaction handler (or NULL to use rpmsqHandler())
86 * @return no. of refs, -1 on error
88 int rpmsqEnable(int signum, rpmsqAction_t handler);
91 * Fork a child process.
92 * @param sq scriptlet queue element
95 pid_t rpmsqFork(rpmsq sq);
98 * Wait for child process to be reaped.
99 * @param sq scriptlet queue element
100 * @return reaped child pid
102 pid_t rpmsqWait(rpmsq sq);
105 * Call a function in a thread.
106 * @param start function
107 * @param arg function argument
108 * @return thread pointer (NULL on error)
110 void * rpmsqThread(void * (*start) (void * arg), void * arg);
113 * Wait for thread to terminate.
114 * @param thread thread
115 * @return 0 on success
117 int rpmsqJoin(void * thread);
120 * Compare thread with current thread.
121 * @param thread thread
122 * @return 0 if not equal
124 int rpmsqThreadEqual(void * thread);
127 * Execute a command, returning its status.
129 int rpmsqExecve (const char ** argv);