aboutsummaryrefslogtreecommitdiff
path: root/src/daemon/daemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon/daemon.c')
-rw-r--r--src/daemon/daemon.c52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/daemon/daemon.c b/src/daemon/daemon.c
index 71d069ec..f4273453 100644
--- a/src/daemon/daemon.c
+++ b/src/daemon/daemon.c
@@ -1054,6 +1054,24 @@ MHD_add_connection (struct MHD_Daemon *daemon,
1054 } 1054 }
1055#endif 1055#endif
1056 1056
1057 if (0 != pthread_mutex_lock(&daemon->cleanup_connection_mutex))
1058 {
1059#if HAVE_MESSAGES
1060 MHD_DLOG (daemon, "Failed to acquire cleanup mutex\n");
1061#endif
1062 abort();
1063 }
1064 DLL_insert (daemon->connections_head,
1065 daemon->connections_tail,
1066 connection);
1067 if (0 != pthread_mutex_unlock(&daemon->cleanup_connection_mutex))
1068 {
1069#if HAVE_MESSAGES
1070 MHD_DLOG (daemon, "Failed to release cleanup mutex\n");
1071#endif
1072 abort();
1073 }
1074
1057 /* attempt to create handler thread */ 1075 /* attempt to create handler thread */
1058 if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) 1076 if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
1059 { 1077 {
@@ -1068,27 +1086,27 @@ MHD_add_connection (struct MHD_Daemon *daemon,
1068 SHUTDOWN (client_socket, SHUT_RDWR); 1086 SHUTDOWN (client_socket, SHUT_RDWR);
1069 CLOSE (client_socket); 1087 CLOSE (client_socket);
1070 MHD_ip_limit_del (daemon, addr, addrlen); 1088 MHD_ip_limit_del (daemon, addr, addrlen);
1071 free (connection->addr); 1089 if (0 != pthread_mutex_lock(&daemon->cleanup_connection_mutex))
1072 free (connection); 1090 {
1073 return MHD_NO;
1074 }
1075 }
1076 if (0 != pthread_mutex_lock(&daemon->cleanup_connection_mutex))
1077 {
1078#if HAVE_MESSAGES 1091#if HAVE_MESSAGES
1079 MHD_DLOG (daemon, "Failed to acquire cleanup mutex\n"); 1092 MHD_DLOG (daemon, "Failed to acquire cleanup mutex\n");
1080#endif 1093#endif
1081 abort(); 1094 abort();
1082 } 1095 }
1083 DLL_insert (daemon->connections_head, 1096 DLL_remove (daemon->connections_head,
1084 daemon->connections_tail, 1097 daemon->connections_tail,
1085 connection); 1098 connection);
1086 if (0 != pthread_mutex_unlock(&daemon->cleanup_connection_mutex)) 1099 if (0 != pthread_mutex_unlock(&daemon->cleanup_connection_mutex))
1087 { 1100 {
1088#if HAVE_MESSAGES 1101#if HAVE_MESSAGES
1089 MHD_DLOG (daemon, "Failed to release cleanup mutex\n"); 1102 MHD_DLOG (daemon, "Failed to release cleanup mutex\n");
1090#endif 1103#endif
1091 abort(); 1104 abort();
1105 }
1106 free (connection->addr);
1107 free (connection);
1108 return MHD_NO;
1109 }
1092 } 1110 }
1093 daemon->max_connections--; 1111 daemon->max_connections--;
1094 return MHD_YES; 1112 return MHD_YES;