# HG changeset patch # User Stu Tomlinson # Date 1196616783 0 # Node ID e43ad3bbd45d393278572c179932622ae012daa2 # Parent 6584a84f71da3cd89b1cb84b0df3929c87f43bf5 More catching up on things, from 7e27312a7d07beb1786494161664e0f7502e8ea9: "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 6584a84f71da -r e43ad3bbd45d 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 6584a84f71da -r e43ad3bbd45d 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; }