* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
+#include "main.h"
#include "ClientSocket.h"
#include "IRCParser.h"
#include "UserNode.h"
#ifdef HAVE_THREADS
unsigned int tid;
#endif
+ if(process_state.running == 0)
+ return; //just ignore the event (shutdown sequence)
switch(event->type) {
case IOEVENT_CONNECTED:
client->flags |= SOCKET_FLAG_CONNECTED;
#include "IOHandler.h"
#include "statistics.h"
-static struct {
- time_t start_time;
- int running : 1;
- int restart : 1;
- int run_as_daemon : 1;
- int daemonized : 1;
- int loglevel : 8;
- int loaded_config : 1;
- int running_threads : 8;
-
- int argc;
- char **argv;
-
- char config[MAXLEN];
- char pidfile[MAXLEN];
-} process_state;
+struct ProcessState process_state;
static FILE *log_fptr = NULL;
void shutdown_subsystems() {
free_sockets(1);
- usleep(10000); //wait for disconnect (10ms)
+ //wait 50ms (run iohandler)
+ {
+ struct timeval timeout, ctime1, ctime2;
+ gettimeofday(&ctime1, NULL);
+ ctime1.tv_usec += 50000;
+ if(ctime1.tv_usec > 1000000) {
+ ctime1.tv_usec -= 1000000;
+ ctime1.tv_sec++;
+ }
+ do {
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 10000;
+ iohandler_poll_timeout(timeout);
+ gettimeofday(&ctime2, NULL);
+ } while(timeval_is_bigger(ctime1, ctime2));
+ }
stop_modules();
free_sockets(0);
qserver_free();
#define _main_h
#include "overall.h"
+struct ProcessState {
+ time_t start_time;
+ int running : 1;
+ int restart : 1;
+ int run_as_daemon : 1;
+ int daemonized : 1;
+ int loglevel : 8;
+ int loaded_config : 1;
+ int running_threads : 8;
+
+ int argc;
+ char **argv;
+
+ char config[MAXLEN];
+ char pidfile[MAXLEN];
+};
+
#ifndef DND_FUNCTIONS
+extern struct ProcessState process_state;
+
#ifdef HAVE_THREADS
extern pthread_mutex_t cache_sync;
extern pthread_mutex_t whohandler_sync, whohandler_mass_sync;