mirror of
https://github.com/3proxy/3proxy.git
synced 2025-04-22 04:02:08 +08:00
Avoid sleep on service thread sync
Some checks failed
C/C++ CI / ${{ matrix.target }} (macos-15) (push) Has been cancelled
C/C++ CI / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Has been cancelled
C/C++ CI / ${{ matrix.target }} (ubuntu-latest) (push) Has been cancelled
C/C++ CI / ${{ matrix.target }} (windows-2022) (push) Has been cancelled
Some checks failed
C/C++ CI / ${{ matrix.target }} (macos-15) (push) Has been cancelled
C/C++ CI / ${{ matrix.target }} (ubuntu-24.04-arm) (push) Has been cancelled
C/C++ CI / ${{ matrix.target }} (ubuntu-latest) (push) Has been cancelled
C/C++ CI / ${{ matrix.target }} (windows-2022) (push) Has been cancelled
This commit is contained in:
parent
7320094c11
commit
57841074b9
@ -521,6 +521,14 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
|
|||||||
#ifndef NORADIUS
|
#ifndef NORADIUS
|
||||||
pthread_mutex_init(&rad_mutex, NULL);
|
pthread_mutex_init(&rad_mutex, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _WIN32
|
||||||
|
if(!CreatePipe(&conf.threadinit[0], &conf.threadinit[1], NULL, 1)){
|
||||||
|
#else
|
||||||
|
if(pipe(conf.threadinit)) {
|
||||||
|
#endif
|
||||||
|
fprintf(stderr, "CreatePipe failed\n");
|
||||||
|
return 1;
|
||||||
|
};
|
||||||
|
|
||||||
freeconf(&conf);
|
freeconf(&conf);
|
||||||
res = readconfig(fp);
|
res = readconfig(fp);
|
||||||
|
@ -93,6 +93,7 @@ char *rotations[] = {
|
|||||||
|
|
||||||
|
|
||||||
struct extparam conf = {
|
struct extparam conf = {
|
||||||
|
{0, 0},
|
||||||
{1, 5, 30, 60, 180, 1800, 15, 60, 15, 5, 0, 0},
|
{1, 5, 30, 60, 180, 1800, 15, 60, 15, 5, 0, 0},
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
@ -101,7 +102,7 @@ struct extparam conf = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
0,
|
||||||
0, -1, 0, 0, 0, 0,
|
-1, 0, 0, 0, 0,
|
||||||
0, 500, 0, 0, 0, 0, 0, 0, 2,
|
0, 500, 0, 0, 0, 0, 0, 0, 2,
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
6, 600,
|
6, 600,
|
||||||
|
11
src/conf.c
11
src/conf.c
@ -150,8 +150,8 @@ int start_proxy_thread(struct child * chp){
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HANDLE h;
|
HANDLE h;
|
||||||
#endif
|
#endif
|
||||||
|
char r[1];
|
||||||
|
|
||||||
conf.threadinit = 1;
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#ifndef _WINCE
|
#ifndef _WINCE
|
||||||
h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, 16384+conf.stacksize, (void *)startsrv, (void *) chp, (DWORD)0, &thread);
|
h = (HANDLE)_beginthreadex((LPSECURITY_ATTRIBUTES )NULL, 16384+conf.stacksize, (void *)startsrv, (void *) chp, (DWORD)0, &thread);
|
||||||
@ -166,7 +166,14 @@ int start_proxy_thread(struct child * chp){
|
|||||||
pthread_create(&thread, &pa, startsrv, (void *)chp);
|
pthread_create(&thread, &pa, startsrv, (void *)chp);
|
||||||
pthread_attr_destroy(&pa);
|
pthread_attr_destroy(&pa);
|
||||||
#endif
|
#endif
|
||||||
while(conf.threadinit)usleep(SLEEPTIME);
|
#ifdef _WIN32
|
||||||
|
ReadFile(conf.threadinit[0], r, 1, NULL, NULL);
|
||||||
|
#else
|
||||||
|
while(read(conf.threadinit[0], r, 1) !=1) if(errno != EINTR) {
|
||||||
|
fprintf(stderr, "pipe failed\n");
|
||||||
|
return 40;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if(haveerror) {
|
if(haveerror) {
|
||||||
fprintf(stderr, "Service not started on line: %d%s\n", linenum, haveerror == 2? ": insufficient memory":"");
|
fprintf(stderr, "Service not started on line: %d%s\n", linenum, haveerror == 2? ": insufficient memory":"");
|
||||||
return(40);
|
return(40);
|
||||||
|
@ -115,6 +115,15 @@ void * threadfunc (void *p) {
|
|||||||
}
|
}
|
||||||
#undef param
|
#undef param
|
||||||
|
|
||||||
|
int pushthreadinit(){
|
||||||
|
return
|
||||||
|
#ifdef _WIN32
|
||||||
|
WriteFile(conf.threadinit[1], "1", 1, NULL, NULL);
|
||||||
|
#else
|
||||||
|
write(conf.threadinit[1], "1", 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct socketoptions sockopts[] = {
|
struct socketoptions sockopts[] = {
|
||||||
#ifdef TCP_NODELAY
|
#ifdef TCP_NODELAY
|
||||||
@ -526,7 +535,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
if (error || i!=argc) {
|
if (error || i!=argc) {
|
||||||
#ifndef STDMAIN
|
#ifndef STDMAIN
|
||||||
haveerror = 1;
|
haveerror = 1;
|
||||||
conf.threadinit = 0;
|
pushthreadinit();
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, "%s of %s\n"
|
fprintf(stderr, "%s of %s\n"
|
||||||
"Usage: %s options\n"
|
"Usage: %s options\n"
|
||||||
@ -558,7 +567,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
if (error || argc != i+3 || *argv[i]=='-'|| (*SAPORT(&srv.intsa) = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) {
|
if (error || argc != i+3 || *argv[i]=='-'|| (*SAPORT(&srv.intsa) = htons((unsigned short)atoi(argv[i])))==0 || (srv.targetport = htons((unsigned short)atoi(argv[i+2])))==0) {
|
||||||
#ifndef STDMAIN
|
#ifndef STDMAIN
|
||||||
haveerror = 1;
|
haveerror = 1;
|
||||||
conf.threadinit = 0;
|
pushthreadinit();
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, "%s of %s\n"
|
fprintf(stderr, "%s of %s\n"
|
||||||
"Usage: %s options"
|
"Usage: %s options"
|
||||||
@ -624,7 +633,7 @@ int MODULEMAINFUNC (int argc, char** argv){
|
|||||||
#ifndef STDMAIN
|
#ifndef STDMAIN
|
||||||
|
|
||||||
copyfilter(conf.filters, &srv);
|
copyfilter(conf.filters, &srv);
|
||||||
conf.threadinit = 0;
|
pushthreadinit();
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -632,6 +632,11 @@ struct filemon {
|
|||||||
|
|
||||||
|
|
||||||
struct extparam {
|
struct extparam {
|
||||||
|
#ifdef _WIN32
|
||||||
|
HANDLE threadinit[2];
|
||||||
|
#else
|
||||||
|
int threadinit[2];
|
||||||
|
#endif
|
||||||
int timeouts[12];
|
int timeouts[12];
|
||||||
struct ace * acl;
|
struct ace * acl;
|
||||||
char * conffile;
|
char * conffile;
|
||||||
@ -640,7 +645,7 @@ struct extparam {
|
|||||||
struct trafcount * trafcounter;
|
struct trafcount * trafcounter;
|
||||||
struct srvparam *services;
|
struct srvparam *services;
|
||||||
int stacksize,
|
int stacksize,
|
||||||
threadinit, counterd, haveerror, rotate, paused, archiverc,
|
counterd, haveerror, rotate, paused, archiverc,
|
||||||
demon, maxchild, backlog, needreload, timetoexit, version, noforce, bandlimver, parentretries;
|
demon, maxchild, backlog, needreload, timetoexit, version, noforce, bandlimver, parentretries;
|
||||||
int authcachetype, authcachetime;
|
int authcachetype, authcachetime;
|
||||||
int filtermaxsize;
|
int filtermaxsize;
|
||||||
|
Loading…
Reference in New Issue
Block a user