# HG changeset patch # User Stu Tomlinson # Date 1196616783 0 # Node ID 56f78bc6c53e9de1f3a05ab43f121c273c70f81d # Parent 960c07f6f052c53747192fd43876f6f28b212c51 More catching up on things, from 8548e491a5b470d5665cb1cf87a7b0caaa3c87a5: "Fix all our calls to fcntl(listenfd, F_SETFL, O_NONBLOCK); fcntl() with F_SETFL overwrites the old flags with the new ones, so you should call fcntl() with F_GETFL, then OR that value with O_NONBLOCK before setting the flags. We've been doing this wrong for a long time and it hasn't seemed to hurt anything, but I thought it would be good to fix it." diff -r 960c07f6f052 -r 56f78bc6c53e libpurple/protocols/msnp9/directconn.c --- a/libpurple/protocols/msnp9/directconn.c Sun Dec 02 17:29:30 2007 +0000 +++ b/libpurple/protocols/msnp9/directconn.c Sun Dec 02 17:33:03 2007 +0000 @@ -81,6 +81,7 @@ create_listener(int port) { int fd; + int flags; const int on = 1; #if 0 @@ -156,7 +157,8 @@ return -1; } - fcntl(fd, F_SETFL, O_NONBLOCK); + flags = fcntl(fd, F_GETFL); + fcntl(fd, F_SETFL, flags | O_NONBLOCK); return fd; } diff -r 960c07f6f052 -r 56f78bc6c53e libpurple/protocols/msnp9/servconn.c --- a/libpurple/protocols/msnp9/servconn.c Sun Dec 02 17:29:30 2007 +0000 +++ b/libpurple/protocols/msnp9/servconn.c Sun Dec 02 17:33:03 2007 +0000 @@ -468,6 +468,7 @@ create_listener(int port) { int fd; + int flags; const int on = 1; #if 0 @@ -543,7 +544,8 @@ return -1; } - fcntl(fd, F_SETFL, O_NONBLOCK); + flags = fcntl(fd, F_GETFL); + fcntl(fd, F_SETFL, flags | O_NONBLOCK); return fd; }