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;