From f82f0d03c766a2c2d05d19c4b8bd718e60ea3cc7 Mon Sep 17 00:00:00 2001 From: pk910 Date: Sat, 18 Feb 2012 21:34:22 +0100 Subject: [PATCH] synchronized more important events to fix some crashes --- src/IRCParser.c | 51 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/src/IRCParser.c b/src/IRCParser.c index 220283e..cf98cc1 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -466,17 +466,28 @@ static IRC_CMD(raw_kick) { static IRC_CMD(raw_topic) { if(from == NULL || argc < 2) return 0; + SYNCHRONIZE(cache_sync); struct UserNode *user = getUserByMask(from); struct ChanNode *chan = getChanByName(argv[0]); - if(chan == NULL) return 0; - if(chan->chanbot != client->user) return 1; //just ignore it to prevent event duplicates + if(chan == NULL) { + DESYNCHRONIZE(cache_sync); + return 0; + } + if(chan->chanbot != client->user) { + DESYNCHRONIZE(cache_sync); + return 1; //just ignore it to prevent event duplicates + } if(user == NULL) { user = createTempUserMask(from); - if(!user) return 0; + if(!user) { + DESYNCHRONIZE(cache_sync); + return 0; + } user->flags |= USERFLAG_ISTMPUSER; } event_topic(user, chan, argv[1]); strcpy(chan->topic, argv[1]); + DESYNCHRONIZE(cache_sync); return 1; } @@ -570,15 +581,26 @@ static void client_renamed(struct ClientSocket *client); static IRC_CMD(raw_nick) { if(from == NULL || argc == 0) return 0; + SYNCHRONIZE(cache_sync); struct UserNode *user = getUserByMask(from); - if(user == NULL) return 0; + if(user == NULL) { + DESYNCHRONIZE(cache_sync); + return 0; + } if(isBot(user)) { - if(client->user != user) return 1; + if(client->user != user) { + DESYNCHRONIZE(cache_sync); + return 1; + } client_renamed(client); } - else if(!is_firstBotSeeUser(client, user)) return 1; //we ignore it - but it's not a parse error + else if(!is_firstBotSeeUser(client, user)) { + DESYNCHRONIZE(cache_sync); + return 1; //we ignore it - but it's not a parse error + } event_nick(user, argv[0]); renameUser(user, argv[0]); + DESYNCHRONIZE(cache_sync); return 1; } @@ -621,22 +643,33 @@ static IRC_CMD(raw_invite) { static IRC_CMD(raw_mode) { if(from == NULL || argc < 2) return 0; + SYNCHRONIZE(cache_sync); struct UserNode *user = getUserByMask(from); if(user == NULL) { user = createTempUserMask(from); - if(!user) return 0; + if(!user) { + DESYNCHRONIZE(cache_sync); + return 0; + } user->flags |= USERFLAG_ISTMPUSER; } if(argv[0][0] == '#') { //ChannelMode struct ChanNode *chan = getChanByName(argv[0]); - if(!chan) return 0; - if(chan->chanbot != client->user) return 1; + if(!chan) { + DESYNCHRONIZE(cache_sync); + return 0; + } + if(chan->chanbot != client->user) { + DESYNCHRONIZE(cache_sync); + return 1; + } parseModes(chan->modes, argv[1], argv+2, argc-2); event_mode(user, chan, argv[1], argv+2, argc-2); } else { //UserMode } + DESYNCHRONIZE(cache_sync); return 1; } -- 2.20.1