mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
Make mpg123 behave more nicely
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5142 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -136,6 +136,7 @@ extern int test_for_thread_safety(void);
|
|||||||
|
|
||||||
extern const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia);
|
extern const char *ast_inet_ntoa(char *buf, int bufsiz, struct in_addr ia);
|
||||||
extern int ast_utils_init(void);
|
extern int ast_utils_init(void);
|
||||||
|
extern int ast_wait_for_input(int fd, int ms);
|
||||||
|
|
||||||
/* The realloca lets us ast_restrdupa(), but you can't mix any other ast_strdup calls! */
|
/* The realloca lets us ast_restrdupa(), but you can't mix any other ast_strdup calls! */
|
||||||
|
|
||||||
|
@@ -945,11 +945,11 @@ static void ast_moh_destroy(void)
|
|||||||
while (moh) {
|
while (moh) {
|
||||||
if (moh->pid) {
|
if (moh->pid) {
|
||||||
ast_log(LOG_DEBUG, "killing %d!\n", moh->pid);
|
ast_log(LOG_DEBUG, "killing %d!\n", moh->pid);
|
||||||
stime = time(NULL) + 5;
|
stime = time(NULL) + 2;
|
||||||
pid = moh->pid;
|
pid = moh->pid;
|
||||||
moh->pid = 0;
|
moh->pid = 0;
|
||||||
kill(pid, SIGKILL);
|
kill(pid, SIGKILL);
|
||||||
while ((bytes = read(moh->srcfd, buff, 8192)) && time(NULL) < stime) {
|
while ((ast_wait_for_input(moh->srcfd, 100) > -1) && (bytes = read(moh->srcfd, buff, 8192)) && time(NULL) < stime) {
|
||||||
tbytes = tbytes + bytes;
|
tbytes = tbytes + bytes;
|
||||||
}
|
}
|
||||||
ast_log(LOG_DEBUG, "mpg123 pid %d and child died after %d bytes read\n", pid, tbytes);
|
ast_log(LOG_DEBUG, "mpg123 pid %d and child died after %d bytes read\n", pid, tbytes);
|
||||||
|
10
utils.c
10
utils.c
@@ -24,6 +24,7 @@
|
|||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <asterisk/lock.h>
|
#include <asterisk/lock.h>
|
||||||
#include <asterisk/utils.h>
|
#include <asterisk/utils.h>
|
||||||
|
#include <asterisk/io.h>
|
||||||
#include <asterisk/logger.h>
|
#include <asterisk/logger.h>
|
||||||
#include <asterisk/md5.h>
|
#include <asterisk/md5.h>
|
||||||
|
|
||||||
@@ -404,6 +405,15 @@ int ast_pthread_create_stack(pthread_t *thread, pthread_attr_t *attr, void *(*st
|
|||||||
return pthread_create(thread, attr, start_routine, data); /* We're in ast_pthread_create, so it's okay */
|
return pthread_create(thread, attr, start_routine, data); /* We're in ast_pthread_create, so it's okay */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ast_wait_for_input(int fd, int ms)
|
||||||
|
{
|
||||||
|
struct pollfd pfd[1];
|
||||||
|
memset(pfd, 0, sizeof(pfd));
|
||||||
|
pfd[0].fd = fd;
|
||||||
|
pfd[0].events = POLLIN|POLLPRI;
|
||||||
|
return poll(pfd, 1, ms);
|
||||||
|
}
|
||||||
|
|
||||||
/* Case-insensitive substring matching */
|
/* Case-insensitive substring matching */
|
||||||
#ifndef LINUX
|
#ifndef LINUX
|
||||||
static char *upper(const char *orig, char *buf, int bufsize)
|
static char *upper(const char *orig, char *buf, int bufsize)
|
||||||
|
Reference in New Issue
Block a user