mirror of
https://gitlab.xiph.org/xiph/icecast-server.git
synced 2024-12-04 14:46:30 -05:00
Win32 fixes. Specifically a header change and not using the gcc extensions
for vararg macros. It's not as pretty, but it works. svn path=/trunk/thread/; revision=2193
This commit is contained in:
parent
f69b99f1c8
commit
5d78cb3bd6
@ -24,10 +24,10 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
@ -39,10 +39,22 @@
|
|||||||
#include "avl.h"
|
#include "avl.h"
|
||||||
|
|
||||||
#define CATMODULE "thread"
|
#define CATMODULE "thread"
|
||||||
#define LOG_ERROR(y, z...) log_write(_logid, 1, CATMODULE "/" __FUNCTION__, y, ##z)
|
#define LOG_ERROR(y) log_write(_logid, 1, CATMODULE "/" __FUNCTION__, y)
|
||||||
#define LOG_WARN(y, z...) log_write(_logid, 2, CATMODULE "/" __FUNCTION__, y, ##z)
|
#define LOG_ERROR3(y, z1, z2, z3) log_write(_logid, 1, CATMODULE "/" __FUNCTION__, y, z1, z2, z3)
|
||||||
#define LOG_INFO(y, z...) log_write(_logid, 3, CATMODULE "/" __FUNCTION__, y, ##z)
|
#define LOG_ERROR7(y, z1, z2, z3, z4, z5, z6, z7) log_write(_logid, 1, CATMODULE "/" __FUNCTION__, y, z1, z2, z3, z4, z5, z6, z7)
|
||||||
#define LOG_DEBUG(y, z...) log_write(_logid, 4, CATMODULE "/" __FUNCTION__, y, ##z)
|
|
||||||
|
#define LOG_WARN(y) log_write(_logid, 2, CATMODULE "/" __FUNCTION__, y)
|
||||||
|
#define LOG_WARN3(y, z1, z2, z3) log_write(_logid, 2, CATMODULE "/" __FUNCTION__, y, z1, z2, z3)
|
||||||
|
#define LOG_WARN5(y, z1, z2, z3, z4, z5) log_write(_logid, 2, CATMODULE "/" __FUNCTION__, y, z1, z2, z3, z4, z5)
|
||||||
|
#define LOG_WARN7(y, z1, z2, z3, z4, z5, z6, z7) log_write(_logid, 2, CATMODULE "/" __FUNCTION__, y, z1, z2, z3, z4, z5, z6, z7)
|
||||||
|
|
||||||
|
#define LOG_INFO(y) log_write(_logid, 3, CATMODULE "/" __FUNCTION__, y)
|
||||||
|
#define LOG_INFO4(y, z1, z2, z3, z4) log_write(_logid, 3, CATMODULE "/" __FUNCTION__, y, z1, z2, z3, z4)
|
||||||
|
#define LOG_INFO5(y, z1, z2, z3, z4, z5) log_write(_logid, 3, CATMODULE "/" __FUNCTION__, y, z1, z2, z3, z4, z5)
|
||||||
|
|
||||||
|
#define LOG_DEBUG(y) log_write(_logid, 4, CATMODULE "/" __FUNCTION__, y)
|
||||||
|
#define LOG_DEBUG2(y, z1, z2) log_write(_logid, 4, CATMODULE "/" __FUNCTION__, y, z1, z2)
|
||||||
|
#define LOG_DEBUG5(y, z1, z2, z3, z4, z5) log_write(_logid, 4, CATMODULE "/" __FUNCTION__, y, z1, z2, z3, z4, z5)
|
||||||
|
|
||||||
/* INTERNAL DATA */
|
/* INTERNAL DATA */
|
||||||
#define STACKSIZE 8192
|
#define STACKSIZE 8192
|
||||||
@ -297,7 +309,7 @@ void thread_mutex_lock_c(mutex_t *mutex, int line, char *file)
|
|||||||
|
|
||||||
if (!th) LOG_WARN("No mt record for %u in lock [%s:%d]", thread_self(), file, line);
|
if (!th) LOG_WARN("No mt record for %u in lock [%s:%d]", thread_self(), file, line);
|
||||||
|
|
||||||
LOG_DEBUG("Locking %p (%s) on line %d in file %s by thread %d", mutex, mutex->name, line, file, th ? th->thread_id : -1);
|
LOG_DEBUG5("Locking %p (%s) on line %d in file %s by thread %d", mutex, mutex->name, line, file, th ? th->thread_id : -1);
|
||||||
|
|
||||||
# ifdef CHECK_MUTEXES
|
# ifdef CHECK_MUTEXES
|
||||||
/* Just a little sanity checking to make sure that we're locking
|
/* Just a little sanity checking to make sure that we're locking
|
||||||
@ -319,7 +331,7 @@ void thread_mutex_lock_c(mutex_t *mutex, int line, char *file)
|
|||||||
if (tmutex->mutex_id == mutex->mutex_id) {
|
if (tmutex->mutex_id == mutex->mutex_id) {
|
||||||
if (tmutex->thread_id == th->thread_id) {
|
if (tmutex->thread_id == th->thread_id) {
|
||||||
/* Deadlock, same thread can't lock the same mutex twice */
|
/* Deadlock, same thread can't lock the same mutex twice */
|
||||||
LOG_ERROR("DEADLOCK AVOIDED (%d == %d) on mutex [%s] in file %s line %d by thread %d [%s]",
|
LOG_ERROR7("DEADLOCK AVOIDED (%d == %d) on mutex [%s] in file %s line %d by thread %d [%s]",
|
||||||
tmutex->thread_id, th->thread_id, mutex->name ? mutex->name : "undefined", file, line, th->thread_id, th->name);
|
tmutex->thread_id, th->thread_id, mutex->name ? mutex->name : "undefined", file, line, th->thread_id, th->name);
|
||||||
|
|
||||||
_mutex_unlock(&_mutextree_mutex);
|
_mutex_unlock(&_mutextree_mutex);
|
||||||
@ -350,7 +362,7 @@ void thread_mutex_lock_c(mutex_t *mutex, int line, char *file)
|
|||||||
|
|
||||||
_mutex_lock(&_mutextree_mutex);
|
_mutex_lock(&_mutextree_mutex);
|
||||||
|
|
||||||
LOG_DEBUG("Locked %p by thread %d", mutex, th ? th->thread_id : -1);
|
LOG_DEBUG2("Locked %p by thread %d", mutex, th ? th->thread_id : -1);
|
||||||
mutex->line = line;
|
mutex->line = line;
|
||||||
if (th) {
|
if (th) {
|
||||||
mutex->thread_id = th->thread_id;
|
mutex->thread_id = th->thread_id;
|
||||||
@ -368,10 +380,10 @@ void thread_mutex_unlock_c(mutex_t *mutex, int line, char *file)
|
|||||||
thread_t *th = thread_self();
|
thread_t *th = thread_self();
|
||||||
|
|
||||||
if (!th) {
|
if (!th) {
|
||||||
LOG_ERROR("No record for %u in unlock [%s:%d]", thread_self(), file, line);
|
LOG_ERROR3("No record for %u in unlock [%s:%d]", thread_self(), file, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG("Unlocking %p (%s) on line %d in file %s by thread %d", mutex, mutex->name, line, file, th ? th->thread_id : -1);
|
LOG_DEBUG5("Unlocking %p (%s) on line %d in file %s by thread %d", mutex, mutex->name, line, file, th ? th->thread_id : -1);
|
||||||
|
|
||||||
mutex->line = line;
|
mutex->line = line;
|
||||||
|
|
||||||
@ -388,7 +400,7 @@ void thread_mutex_unlock_c(mutex_t *mutex, int line, char *file)
|
|||||||
|
|
||||||
if (tmutex->mutex_id == mutex->mutex_id) {
|
if (tmutex->mutex_id == mutex->mutex_id) {
|
||||||
if (tmutex->thread_id != th->thread_id) {
|
if (tmutex->thread_id != th->thread_id) {
|
||||||
LOG_ERROR("ILLEGAL UNLOCK (%d != %d) on mutex [%s] in file %s line %d by thread %d [%s]", tmutex->thread_id, th->thread_id,
|
LOG_ERROR7("ILLEGAL UNLOCK (%d != %d) on mutex [%s] in file %s line %d by thread %d [%s]", tmutex->thread_id, th->thread_id,
|
||||||
mutex->name ? mutex->name : "undefined", file, line, th->thread_id, th->name);
|
mutex->name ? mutex->name : "undefined", file, line, th->thread_id, th->name);
|
||||||
_mutex_unlock(&_mutextree_mutex);
|
_mutex_unlock(&_mutextree_mutex);
|
||||||
return;
|
return;
|
||||||
@ -415,7 +427,7 @@ void thread_mutex_unlock_c(mutex_t *mutex, int line, char *file)
|
|||||||
|
|
||||||
_mutex_lock(&_mutextree_mutex);
|
_mutex_lock(&_mutextree_mutex);
|
||||||
|
|
||||||
LOG_DEBUG("Unlocked %p by thread %d", mutex, th ? th->thread_id : -1);
|
LOG_DEBUG2("Unlocked %p by thread %d", mutex, th ? th->thread_id : -1);
|
||||||
mutex->line = -1;
|
mutex->line = -1;
|
||||||
if (mutex->thread_id == th->thread_id) {
|
if (mutex->thread_id == th->thread_id) {
|
||||||
mutex->thread_id = MUTEX_STATE_NOTLOCKED;
|
mutex->thread_id = MUTEX_STATE_NOTLOCKED;
|
||||||
@ -509,7 +521,7 @@ void thread_exit_c(int val, int line, char *file)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (th) {
|
if (th) {
|
||||||
LOG_INFO("Removing thread %d [%s] started at [%s:%d], reason: 'Thread Exited'", th->thread_id, th->name, th->file, th->line);
|
LOG_INFO4("Removing thread %d [%s] started at [%s:%d], reason: 'Thread Exited'", th->thread_id, th->name, th->file, th->line);
|
||||||
|
|
||||||
_mutex_lock(&_threadtree_mutex);
|
_mutex_lock(&_threadtree_mutex);
|
||||||
avl_delete(_threadtree, th, _free_thread);
|
avl_delete(_threadtree, th, _free_thread);
|
||||||
@ -568,7 +580,7 @@ static void *_start_routine(void *arg)
|
|||||||
avl_insert(_threadtree, (void *)thread);
|
avl_insert(_threadtree, (void *)thread);
|
||||||
_mutex_unlock(&_threadtree_mutex);
|
_mutex_unlock(&_threadtree_mutex);
|
||||||
|
|
||||||
LOG_INFO("Added thread %d [%s] started at [%s:%d]", thread->thread_id, thread->name, thread->file, thread->line);
|
LOG_INFO4("Added thread %d [%s] started at [%s:%d]", thread->thread_id, thread->name, thread->file, thread->line);
|
||||||
|
|
||||||
if (start->detached) {
|
if (start->detached) {
|
||||||
pthread_detach(thread->sys_thread);
|
pthread_detach(thread->sys_thread);
|
||||||
|
Loading…
Reference in New Issue
Block a user