- Main Page
- Related Pages
- Modules
- Data Structures
- Files

- File List
- Globals

# rpmsq.h

Go to the documentation of this file.

    00001 #ifndef H_RPMSQ
    00002 #define H_RPMSQ
    00003
    00009 #include <rpm/rpmsw.h>
    00010 #include <signal.h>
    00011
    00012 #ifdef __cplusplus
    00013 extern "C" {
    00014 #endif
    00015
    00018 typedef struct rpmsig_s * rpmsig;
    00019
    00022 typedef struct rpmsqElem * rpmsq;
    00023
    00030 #ifdef SA_SIGINFO
    00031 typedef void (*rpmsqAction_t) (int signum, void * info, void * context);
    00032 #else
    00033 typedef void (*rpmsqAction_t) (int signum);
    00034 #endif
    00035
    00036 extern int _rpmsq_debug;
    00037
    00038 /* XXX make this fully opaque? */
    00039 #if defined(_RPMSQ_INTERNAL)
    00040
    00043 struct rpmsqElem {
    00044     struct rpmsqElem * q_forw;
    00045     struct rpmsqElem * q_back;
    00046     pid_t child;
    00047     volatile pid_t reaped;
    00048     volatile int status;
    00049     struct rpmop_s op;
    00050     rpmtime_t ms_scriptlets;
    00051     int reaper;
    00052     int pipes[2];
    00053     void * id;
    00054     pthread_mutex_t mutex;
    00055     pthread_cond_t cond;
    00056 };
    00057 #endif /* _RPMSQ_INTERNAL */
    00058
    00065 int rpmsqIsCaught(int signum);
    00066
    00073 #ifdef SA_SIGINFO
    00074 void rpmsqAction(int signum, void * info, void * context);
    00075 #else
    00076 void rpmsqAction(int signum);
    00077 #endif
    00078
    00085 int rpmsqEnable(int signum, rpmsqAction_t handler);
    00086
    00092 pid_t rpmsqFork(rpmsq sq);
    00093
    00099 pid_t rpmsqWait(rpmsq sq);
    00100
    00107 void * rpmsqThread(void * (*start) (void * arg), void * arg);
    00108
    00114 int rpmsqJoin(void * thread);
    00115
    00121 int rpmsqThreadEqual(void * thread);
    00122
    00126 int rpmsqExecve (const char ** argv);
    00127
    00128 #ifdef __cplusplus
    00129 }
    00130 #endif
    00131
    00132 #endif  /* H_RPMSQ */