result = sigemptyset(&sigset);
if(result == -1) {
- perror("sigemptyset");
+ PERROR("sigemptyset");
return -1;
}
result = sigaddset(&sigset, SIGPIPE);
if(result == -1) {
- perror("sigaddset");
+ PERROR("sigaddset");
return -1;
}
return 0;
}
else if(result == -1) {
- perror("sigtimedwait");
+ PERROR("sigtimedwait");
return -1;
}
else if(result == SIGPIPE) {
result = mkdir(dir, 0777);
if(result == -1) {
if(errno != EEXIST) {
- perror("mkdir");
+ PERROR("mkdir");
return -1;
}
}
return -1;
}
+ /* get pidunique */
+ asprintf(&send_msg, "get_pidunique");
+ result = ustcomm_send_request(&buf->conn, send_msg, &received_msg);
+ free(send_msg);
+ if(result == -1) {
+ ERR("problem in ustcomm_send_request(get_pidunique)");
+ return -1;
+ }
+
+ result = sscanf(received_msg, "%lld", &buf->pidunique);
+ if(result != 1) {
+ ERR("unable to parse response to get_pidunique");
+ return -1;
+ }
+ free(received_msg);
+ DBG("got pidunique %lld", buf->pidunique);
+
/* get shmid */
asprintf(&send_msg, "get_shmid %s", buf->name);
result = ustcomm_send_request(&buf->conn, send_msg, &received_msg);
/* attach memory */
buf->mem = shmat(buf->shmid, NULL, 0);
if(buf->mem == (void *) 0) {
- perror("shmat");
+ PERROR("shmat");
return -1;
}
DBG("successfully attached buffer memory");
buf->bufstruct_mem = shmat(buf->bufstruct_shmid, NULL, 0);
if(buf->bufstruct_mem == (void *) 0) {
- perror("shmat");
+ PERROR("shmat");
return -1;
}
DBG("successfully attached buffer bufstruct memory");
/* obtain info on the memory segment */
result = shmctl(buf->shmid, IPC_STAT, &shmds);
if(result == -1) {
- perror("shmctl");
+ PERROR("shmctl");
return -1;
}
buf->memlen = shmds.shm_segsz;
trace_path = USTD_DEFAULT_TRACE_PATH;
}
- asprintf(&tmp, "%s/%u", trace_path, buf->pid);
+ asprintf(&tmp, "%s/%u_%lld", trace_path, buf->pid, buf->pidunique);
result = create_dir_if_needed(tmp);
if(result == -1) {
ERR("could not create directory %s", tmp);
}
free(tmp);
- asprintf(&tmp, "%s/%u/%s_0", trace_path, buf->pid, buf->name);
- result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC, 00600);
+ asprintf(&tmp, "%s/%u_%lld/%s_0", trace_path, buf->pid, buf->pidunique, buf->name);
+ result = fd = open(tmp, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 00600);
if(result == -1) {
PERROR("open");
ERR("failed opening trace file %s", tmp);
result = sigemptyset(&sigset);
if(result == -1) {
- perror("sigemptyset");
+ PERROR("sigemptyset");
return 1;
}
sa.sa_handler = sigterm_handler;
/* setup handler for SIGPIPE */
result = sigemptyset(&sigset);
if(result == -1) {
- perror("sigemptyset");
+ PERROR("sigemptyset");
return 1;
}
result = sigaddset(&sigset, SIGPIPE);
if(result == -1) {
- perror("sigaddset");
+ PERROR("sigaddset");
return 1;
}
result = sigprocmask(SIG_BLOCK, &sigset, NULL);
if(result == -1) {
- perror("sigprocmask");
+ PERROR("sigprocmask");
return 1;
}