Mercurial > hg
comparison mcabber/src/jabglue.c @ 939:12fa2ae6445d
Get rid of "busy-waiting" (Christof Meerwald)
This patch from Christof Meerwald, slightly modified, reduces mcabber CPU
usage and the number of context switches per second.
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Tue, 11 Jul 2006 22:50:48 +0200 |
parents | a07bd351008b |
children | fc30221b952d |
comparison
equal
deleted
inserted
replaced
938:40175f3dcef7 | 939:12fa2ae6445d |
---|---|
166 } | 166 } |
167 | 167 |
168 void jb_main() | 168 void jb_main() |
169 { | 169 { |
170 time_t now; | 170 time_t now; |
171 fd_set fds; | |
172 long autoaway_timeout; | |
173 struct timeval tv; | |
171 static time_t last_eviqs_check = 0; | 174 static time_t last_eviqs_check = 0; |
172 | 175 |
173 if (!online) { | 176 if (!online) { |
174 safe_usleep(10000); | 177 safe_usleep(10000); |
175 return; | 178 return; |
179 safe_usleep(75000); | 182 safe_usleep(75000); |
180 jab_start(jc); | 183 jab_start(jc); |
181 return; | 184 return; |
182 } | 185 } |
183 | 186 |
184 jab_poll(jc, 50); | 187 FD_ZERO(&fds); |
188 FD_SET(0, &fds); | |
189 FD_SET(jc->fd, &fds); | |
190 | |
191 tv.tv_sec = 60; | |
192 tv.tv_usec = 0; | |
193 | |
194 if (KeepaliveDelay) { | |
195 time(&now); | |
196 if (now > LastPingTime + (time_t)KeepaliveDelay) { | |
197 tv.tv_sec = 0; | |
198 } else { | |
199 tv.tv_sec = LastPingTime + (time_t)KeepaliveDelay - now; | |
200 } | |
201 } | |
202 | |
203 autoaway_timeout = scr_GetAutoAwayTimeout(); | |
204 if (tv.tv_sec > autoaway_timeout) | |
205 tv.tv_sec = autoaway_timeout; | |
206 | |
207 if (select(jc->fd + 1, &fds, NULL, NULL, &tv) > 0) { | |
208 if (FD_ISSET(jc->fd, &fds)) | |
209 jab_poll(jc, 0); | |
210 } | |
185 | 211 |
186 if (jstate == STATE_CONNECTING) { | 212 if (jstate == STATE_CONNECTING) { |
187 if (jc) { | 213 if (jc) { |
188 eviqs *iqn; | 214 eviqs *iqn; |
189 xmlnode z; | 215 xmlnode z; |