projects
/
ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Disable exit fast test (known issue)
[ust.git]
/
libustconsumer
/
libustconsumer.c
diff --git
a/libustconsumer/libustconsumer.c
b/libustconsumer/libustconsumer.c
index 739a22235198c2cc67668c029738c3baf41ac542..c6dd20c355050c69c04ec8a5e97562f9d49c7056 100644
(file)
--- a/
libustconsumer/libustconsumer.c
+++ b/
libustconsumer/libustconsumer.c
@@
-34,7
+34,7
@@
#include <ust/ustconsumer.h>
#include "lowlevel.h"
#include <ust/ustconsumer.h>
#include "lowlevel.h"
-#include "usterr.h"
+#include "usterr
_signal_safe
.h"
#include "ustcomm.h"
#define GET_SUBBUF_OK 1
#include "ustcomm.h"
#define GET_SUBBUF_OK 1
@@
-146,7
+146,7
@@
void decrement_active_buffers(void *arg)
pthread_mutex_unlock(&instance->mutex);
}
pthread_mutex_unlock(&instance->mutex);
}
-static int get_pidunique(int sock,
s64
*pidunique)
+static int get_pidunique(int sock,
int64_t
*pidunique)
{
struct ustcomm_header _send_hdr, *send_hdr;
struct ustcomm_header _recv_hdr, *recv_hdr;
{
struct ustcomm_header _send_hdr, *send_hdr;
struct ustcomm_header _recv_hdr, *recv_hdr;
@@
-353,6
+353,10
@@
struct buffer_info *connect_buffer(struct ustconsumer_instance *instance, pid_t
goto close_fifo;
}
goto close_fifo;
}
+ /* Set subbuffer's information */
+ buf->subbuf_size_order = get_count_order(buf->subbuf_size);
+ buf->alloc_size = buf->subbuf_size * buf->n_subbufs;
+
/* attach memory */
buf->mem = shmat(buf->shmid, NULL, 0);
if(buf->mem == (void *) 0) {
/* attach memory */
buf->mem = shmat(buf->shmid, NULL, 0);
if(buf->mem == (void *) 0) {
@@
-422,6
+426,11
@@
static void destroy_buffer(struct ustconsumer_callbacks *callbacks,
{
int result;
{
int result;
+ result = close(buf->pipe_fd);
+ if(result == -1) {
+ WARN("problem closing the pipe fd");
+ }
+
result = close(buf->app_sock);
if(result == -1) {
WARN("problem calling ustcomm_close_app");
result = close(buf->app_sock);
if(result == -1) {
WARN("problem calling ustcomm_close_app");
@@
-445,7
+454,8
@@
static void destroy_buffer(struct ustconsumer_callbacks *callbacks,
int consumer_loop(struct ustconsumer_instance *instance, struct buffer_info *buf)
{
int consumer_loop(struct ustconsumer_instance *instance, struct buffer_info *buf)
{
- int result, read_result;
+ int result = 0;
+ int read_result;
char read_buf;
pthread_cleanup_push(decrement_active_buffers, instance);
char read_buf;
pthread_cleanup_push(decrement_active_buffers, instance);
@@
-467,6
+477,8
@@
int consumer_loop(struct ustconsumer_instance *instance, struct buffer_info *buf
DBG("App died while being traced");
finish_consuming_dead_subbuffer(instance->callbacks, buf);
break;
DBG("App died while being traced");
finish_consuming_dead_subbuffer(instance->callbacks, buf);
break;
+ } else if (read_result == -1 && errno == EINTR) {
+ continue;
}
if(instance->callbacks->on_read_subbuffer)
}
if(instance->callbacks->on_read_subbuffer)
@@
-531,6
+543,10
@@
void *consumer_thread(void *arg)
int result;
sigset_t sigset;
int result;
sigset_t sigset;
+ pthread_mutex_lock(&args->instance->mutex);
+ args->instance->active_threads++;
+ pthread_mutex_unlock(&args->instance->mutex);
+
if(args->instance->callbacks->on_new_thread)
args->instance->callbacks->on_new_thread(args->instance->callbacks);
if(args->instance->callbacks->on_new_thread)
args->instance->callbacks->on_new_thread(args->instance->callbacks);
@@
-572,6
+588,10
@@
void *consumer_thread(void *arg)
if(args->instance->callbacks->on_close_thread)
args->instance->callbacks->on_close_thread(args->instance->callbacks);
if(args->instance->callbacks->on_close_thread)
args->instance->callbacks->on_close_thread(args->instance->callbacks);
+ pthread_mutex_lock(&args->instance->mutex);
+ args->instance->active_threads--;
+ pthread_mutex_unlock(&args->instance->mutex);
+
free((void *)args->channel);
free(args);
return NULL;
free((void *)args->channel);
free(args);
return NULL;
@@
-620,7
+640,7
@@
static void process_client_cmd(int sock, struct ustcomm_header *req_header,
char *recvbuf, struct ustconsumer_instance *instance)
{
int result;
char *recvbuf, struct ustconsumer_instance *instance)
{
int result;
- struct ustcomm_header _res_header;
+ struct ustcomm_header _res_header
= {0}
;
struct ustcomm_header *res_header = &_res_header;
struct ustcomm_buffer_info *buf_inf;
struct ustcomm_header *res_header = &_res_header;
struct ustcomm_buffer_info *buf_inf;
@@
-723,7
+743,7
@@
int ustconsumer_start_instance(struct ustconsumer_instance *instance)
if (instance->quit_program) {
pthread_mutex_lock(&instance->mutex);
if (instance->quit_program) {
pthread_mutex_lock(&instance->mutex);
- if
(instance->active_buffer
s == 0) {
+ if
(instance->active_buffers == 0 && instance->active_thread
s == 0) {
pthread_mutex_unlock(&instance->mutex);
break;
}
pthread_mutex_unlock(&instance->mutex);
break;
}
@@
-773,8
+793,11
@@
int ustconsumer_stop_instance(struct ustconsumer_instance *instance, int send_ms
struct sockaddr_un addr;
struct sockaddr_un addr;
+socket_again:
result = fd = socket(PF_UNIX, SOCK_STREAM, 0);
if(result == -1) {
result = fd = socket(PF_UNIX, SOCK_STREAM, 0);
if(result == -1) {
+ if (errno == EINTR)
+ goto socket_again;
PERROR("socket");
return 1;
}
PERROR("socket");
return 1;
}
@@
-784,13
+807,21
@@
int ustconsumer_stop_instance(struct ustconsumer_instance *instance, int send_ms
strncpy(addr.sun_path, instance->sock_path, UNIX_PATH_MAX);
addr.sun_path[UNIX_PATH_MAX-1] = '\0';
strncpy(addr.sun_path, instance->sock_path, UNIX_PATH_MAX);
addr.sun_path[UNIX_PATH_MAX-1] = '\0';
+connect_again:
result = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
if(result == -1) {
result = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
if(result == -1) {
+ if (errno == EINTR)
+ goto connect_again;
PERROR("connect");
}
PERROR("connect");
}
- while(bytes != sizeof(msg))
- bytes += send(fd, msg, sizeof(msg), 0);
+ while(bytes != sizeof(msg)) {
+ int inc = send(fd, msg, sizeof(msg), 0);
+ if (inc < 0 && errno != EINTR)
+ break;
+ else
+ bytes += inc;
+ }
close(fd);
close(fd);
@@
-836,7
+867,7
@@
static int init_ustconsumer_socket(struct ustconsumer_instance *instance)
int result;
/* Only check if socket dir exists if we are using the default directory */
int result;
/* Only check if socket dir exists if we are using the default directory */
- result = ensure_dir_exists(SOCK_DIR);
+ result = ensure_dir_exists(SOCK_DIR
, S_IRWXU | S_IRWXG | S_IRWXO
);
if (result == -1) {
ERR("Unable to create socket directory %s", SOCK_DIR);
return -1;
if (result == -1) {
ERR("Unable to create socket directory %s", SOCK_DIR);
return -1;
This page took
0.029689 seconds
and
4
git commands to generate.