mirror of
https://github.com/3proxy/3proxy.git
synced 2026-06-30 10:30:12 +08:00
Fix: invalid error in ssl server handshake can lead to broken service state
This commit is contained in:
parent
8f13582329
commit
e41ab58b2c
@ -18,6 +18,19 @@ DWORD WINAPI threadfunc(LPVOID p) {
|
||||
void * threadfunc (void *p) {
|
||||
#endif
|
||||
int i = -1;
|
||||
#ifndef STDMAIN
|
||||
if(makefilters(param->srv, param) > CONTINUE){
|
||||
#ifndef NOUDPMAIN
|
||||
if(param->srv->service == S_UDPPM) _3proxy_sem_unlock(udpinit);
|
||||
#endif
|
||||
freeparam(param);
|
||||
#ifdef _WIN32
|
||||
return 0;
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
if(param->srv->cbsock != INVALID_SOCKET){
|
||||
SASIZETYPE size = sizeof(param->sinsr);
|
||||
struct pollfd fds;
|
||||
@ -1054,17 +1067,6 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(defparam.hostname)newparam->hostname=(unsigned char *)strdup((char *)defparam.hostname);
|
||||
clearstat(newparam);
|
||||
if(!isudp) newparam->clisock = new_sock;
|
||||
#ifndef STDMAIN
|
||||
if(makefilters(&srv, newparam) > CONTINUE){
|
||||
freeparam(newparam);
|
||||
#ifndef NOUDPMAIN
|
||||
if(isudp) {
|
||||
_3proxy_sem_unlock(udpinit);
|
||||
}
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
newparam->prev = newparam->next = NULL;
|
||||
error = 0;
|
||||
_3proxy_mutex_lock(&srv.counter_mutex);
|
||||
@ -1099,6 +1101,11 @@ int MODULEMAINFUNC (int argc, char** argv){
|
||||
if(newparam->prev) newparam->prev->next = newparam->next;
|
||||
else srv.child = newparam->next;
|
||||
if(newparam->next) newparam->next->prev = newparam->prev;
|
||||
if(newparam->clisock != INVALID_SOCKET){
|
||||
srv.so._shutdown(srv.so.state, newparam->clisock, SHUT_RDWR);
|
||||
srv.so._closesocket(srv.so.state, newparam->clisock);
|
||||
newparam->clisock = INVALID_SOCKET;
|
||||
}
|
||||
newparam->srv = NULL;
|
||||
#ifndef NOUDPMAIN
|
||||
if(isudp){
|
||||
@ -1289,15 +1296,17 @@ void freeparam(struct clientparam * param) {
|
||||
#ifndef STDMAIN
|
||||
if(param->srv->service == S_UDPPM) hashdelete(&udp_table, param);
|
||||
#endif
|
||||
if(param->prev){
|
||||
param->prev->next = param->next;
|
||||
if(param->prev || param->next || param->srv->child == param){
|
||||
if(param->prev){
|
||||
param->prev->next = param->next;
|
||||
}
|
||||
else
|
||||
param->srv->child = param->next;
|
||||
if(param->next){
|
||||
param->next->prev = param->prev;
|
||||
}
|
||||
(param->srv->childcount)--;
|
||||
}
|
||||
else
|
||||
param->srv->child = param->next;
|
||||
if(param->next){
|
||||
param->next->prev = param->prev;
|
||||
}
|
||||
(param->srv->childcount)--;
|
||||
_3proxy_mutex_unlock(¶m->srv->counter_mutex);
|
||||
}
|
||||
if(param->clibuf) free(param->clibuf);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user