Browse Source

source: move pa_memblock_new to data_get

pull/34/head
Jay Sorg 5 years ago
parent
commit
1c983fa112
1 changed files with 36 additions and 31 deletions
  1. +36
    -31
      src/module-xrdp-source.c

+ 36
- 31
src/module-xrdp-source.c View File

@ -182,7 +182,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
char buf[11];
unsigned char ubuf[10];
if (u->fd == 0) {
if (u->fd == -1) {
/* connect to xrdp unix domain socket */
fd = socket(PF_LOCAL, SOCK_STREAM, 0);
memset(&s, 0, sizeof(s));
@ -221,8 +221,6 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
u->fd = fd;
}
data = (char *) pa_memblock_acquire(chunk->memblock);
if (!u->want_src_data) {
char buf[12];
@ -240,8 +238,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
if (lsend(u->fd, buf, 11) != 11) {
close(u->fd);
u->fd = 0;
pa_memblock_release(chunk->memblock);
u->fd = -1;
return -1;
}
u->want_src_data = 1;
@ -263,8 +260,7 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
if (lsend(u->fd, buf, 11) != 11) {
close(u->fd);
u->fd = 0;
pa_memblock_release(chunk->memblock);
u->fd = -1;
u->want_src_data = 0;
return -1;
}
@ -272,15 +268,23 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
/* read length of data available */
if (lrecv(u->fd, (char *) ubuf, 2) != 2) {
close(u->fd);
u->fd = 0;
pa_memblock_release(chunk->memblock);
u->fd = -1;
u->want_src_data = 0;
return -1;
}
bytes = ((ubuf[1] << 8) & 0xff00) | (ubuf[0] & 0xff);
if (bytes == 0) {
pa_memblock_release(chunk->memblock);
return 0;
}
chunk->memblock = pa_memblock_new(u->core->mempool, bytes);
if (chunk->memblock == NULL) {
return 0;
}
data = (char *) pa_memblock_acquire(chunk->memblock);
if (data == NULL) {
return 0;
}
@ -288,11 +292,12 @@ static int data_get(struct userdata *u, pa_memchunk *chunk) {
read_bytes = lrecv(u->fd, data, bytes);
if (read_bytes != bytes) {
close(u->fd);
u->fd = 0;
u->fd = -1;
pa_memblock_release(chunk->memblock);
u->want_src_data = 0;
return -1;
}
pa_memblock_release(chunk->memblock);
return read_bytes;
@ -309,28 +314,26 @@ static void thread_func(void *userdata) {
for (;;) {
int ret;
/* Generate some null data */
if (u->source->thread_info.state == PA_SOURCE_RUNNING) {
pa_usec_t now;
pa_memchunk chunk;
now = pa_rtclock_now();
memset(&chunk, 0, sizeof(chunk));
if ((chunk.length = pa_usec_to_bytes(now - u->timestamp, &u->source->sample_spec)) > 0) {
chunk.length *= 4;
chunk.memblock = pa_memblock_new(u->core->mempool, chunk.length);
chunk.index = 0;
bytes = data_get(u, &chunk);
if (bytes > 0)
{
if (bytes > 0) {
chunk.length = bytes;
pa_source_post(u->source, &chunk);
pa_source_post(u->source, &chunk);
u->timestamp = now;
}
if (chunk.memblock) {
pa_memblock_unref(chunk.memblock);
}
pa_memblock_unref(chunk.memblock);
u->timestamp = now;
}
pa_rtpoll_set_timer_absolute(u->rtpoll, u->timestamp + u->latency_time * PA_USEC_PER_MSEC);
pa_rtpoll_set_timer_absolute(u->rtpoll, now + u->latency_time * PA_USEC_PER_MSEC);
} else {
if (u->want_src_data)
{
@ -351,7 +354,7 @@ static void thread_func(void *userdata) {
if (lsend(u->fd, buf, 11) != 11) {
close(u->fd);
u->fd = 0;
u->fd = -1;
}
u->want_src_data = 0;
pa_log_debug("###### stopped recording");
@ -454,15 +457,17 @@ int pa__init(pa_module *m) {
u->source->thread_info.max_rewind =
pa_usec_to_bytes(u->block_usec, &u->source->sample_spec);
#if defined(PA_CHECK_VERSION)
#if PA_CHECK_VERSION(0, 9, 22)
if (!(u->thread = pa_thread_new("xrdp-source", thread_func, u))) {
#else
if (!(u->thread = pa_thread_new(thread_func, u))) {
#endif
#else
if (!(u->thread = pa_thread_new(thread_func, u)))
#endif
u->fd = -1;
#if defined(PA_CHECK_VERSION)
#if PA_CHECK_VERSION(0, 9, 22)
if (!(u->thread = pa_thread_new("xrdp-source", thread_func, u))) {
#else
if (!(u->thread = pa_thread_new(thread_func, u))) {
#endif
#else
if (!(u->thread = pa_thread_new(thread_func, u))) {
#endif
pa_log("Failed to create thread.");
goto fail;
}


Loading…
Cancel
Save