/* Get the next sub buffer that can be read. */
#define RELAYFS_GET_SUBBUF _IOR(0xF4, 0x00,__u32)
/* Release the oldest reserved (by "get") sub buffer. */
-#define RELAYFS_PUT_SUBBUF _IO(0xF4, 0x01)
+#define RELAYFS_PUT_SUBBUF _IOW(0xF4, 0x01,__u32)
/* returns the number of sub buffers in the per cpu channel. */
#define RELAYFS_GET_N_SUBBUFS _IOR(0xF4, 0x02,__u32)
/* returns the size of the sub buffers. */
static char *channel_name = NULL;
static int daemon_mode = 0;
static int append_mode = 0;
-static int sig_parent = 0;
volatile static int quit_program = 0; /* For signal handler */
/* Args :
* -c directory Root directory of the relayfs trace channels.
* -d Run in background (daemon).
* -a Trace append mode.
- * -s Send SIGIO to parent when ready for IO.
+ * -s Send SIGUSR1 to parent when ready for IO.
*/
void show_arguments(void)
{
printf("-c directory Root directory of the relayfs trace channels.\n");
printf("-d Run in background (daemon).\n");
printf("-a Append to an possibly existing trace.\n");
- printf("-s Send SIGIO to parent when ready for IO.\n");
printf("\n");
}
case 'a':
append_mode = 1;
break;
- case 's':
- sig_parent = 1;
- break;
default:
printf("Invalid argument '%s'.\n", argv[argn]);
printf("\n");
printf("Creating trace subdirectory %s\n", subtrace_name);
ret = mkdir(subtrace_name, S_IRWXU|S_IRWXG|S_IRWXO);
if(ret == -1) {
- if(errno == EEXIST && append_mode) {
- printf("Appending to directory %s as resquested\n", subtrace_name);
- } else {
+ if(errno != EEXIST) {
perror(subtrace_name);
open_ret = -1;
goto end;
pollfd[i].events = POLLIN|POLLPRI;
}
- /* Signal the parent that ready for IO */
- if(sig_parent) kill(getppid(), SIGIO);
-
while(1) {
high_prio = 0;
num_hup = 0;
int main(int argc, char ** argv)
{
int ret;
- pid_t pid;
struct channel_trace_fd fd_pairs = { NULL, 0 };
struct sigaction act;
show_info();
if(daemon_mode) {
- pid = fork();
-
- if(pid > 0) {
- /* parent */
- return 0;
- } else if(pid < 0) {
- /* error */
- printf("An error occured while forking.\n");
- return -1;
- }
- /* else, we are the child, continue... */
- }
+ ret = daemon(0, 0);
+
+ if(ret == -1) {
+ perror("An error occured while daemonizing.");
+ exit(-1);
+ }
+ }
/* Connect the signal handlers */
act.sa_handler = handler;