Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(566)

Side by Side Diff: base/third_party/libevent/event.c

Issue 1912113002: Remove deprecated global variables in libevent that cause tsan errors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu> 2 * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu>
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 &win32ops, 102 &win32ops,
103 #endif 103 #endif
104 NULL 104 NULL
105 }; 105 };
106 106
107 /* Global state */ 107 /* Global state */
108 struct event_base *current_base = NULL; 108 struct event_base *current_base = NULL;
109 extern struct event_base *evsignal_base; 109 extern struct event_base *evsignal_base;
110 static int use_monotonic = 1; 110 static int use_monotonic = 1;
111 111
112 /* Handle signals - This is a deprecated interface */
113 int (*event_sigcb)(void); /* Signal callback when gotsig is set */
114 volatile sig_atomic_t event_gotsig; /* Set in signal handler */
115
116 /* Prototypes */ 112 /* Prototypes */
117 static void event_queue_insert(struct event_base *, struct event *, int); 113 static void event_queue_insert(struct event_base *, struct event *, int);
118 static void event_queue_remove(struct event_base *, struct event *, int); 114 static void event_queue_remove(struct event_base *, struct event *, int);
119 static int event_haveevents(struct event_base *); 115 static int event_haveevents(struct event_base *);
120 116
121 static void event_process_active(struct event_base *); 117 static void event_process_active(struct event_base *);
122 118
123 static int timeout_next(struct event_base *, struct timeval **); 119 static int timeout_next(struct event_base *, struct timeval **);
124 static void timeout_process(struct event_base *); 120 static void timeout_process(struct event_base *);
125 static void timeout_correct(struct event_base *, struct timeval *); 121 static void timeout_correct(struct event_base *, struct timeval *);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 157
162 struct event_base * 158 struct event_base *
163 event_base_new(void) 159 event_base_new(void)
164 { 160 {
165 int i; 161 int i;
166 struct event_base *base; 162 struct event_base *base;
167 163
168 if ((base = calloc(1, sizeof(struct event_base))) == NULL) 164 if ((base = calloc(1, sizeof(struct event_base))) == NULL)
169 event_err(1, "%s: calloc", __func__); 165 event_err(1, "%s: calloc", __func__);
170 166
171 event_sigcb = NULL;
172 event_gotsig = 0;
173
174 gettime(base, &base->event_tv); 167 gettime(base, &base->event_tv);
175 168
176 min_heap_ctor(&base->timeheap); 169 min_heap_ctor(&base->timeheap);
177 TAILQ_INIT(&base->eventqueue); 170 TAILQ_INIT(&base->eventqueue);
178 base->sig.ev_signal_pair[0] = -1; 171 base->sig.ev_signal_pair[0] = -1;
179 base->sig.ev_signal_pair[1] = -1; 172 base->sig.ev_signal_pair[1] = -1;
180 173
181 base->evbase = NULL; 174 base->evbase = NULL;
182 for (i = 0; eventops[i] && !base->evbase; i++) { 175 for (i = 0; eventops[i] && !base->evbase; i++) {
183 base->evsel = eventops[i]; 176 base->evsel = eventops[i];
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 else 372 else
380 event_del(ev); 373 event_del(ev);
381 374
382 /* Allows deletes to work */ 375 /* Allows deletes to work */
383 ncalls = ev->ev_ncalls; 376 ncalls = ev->ev_ncalls;
384 ev->ev_pncalls = &ncalls; 377 ev->ev_pncalls = &ncalls;
385 while (ncalls) { 378 while (ncalls) {
386 ncalls--; 379 ncalls--;
387 ev->ev_ncalls = ncalls; 380 ev->ev_ncalls = ncalls;
388 (*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_ar g); 381 (*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_ar g);
389 » » » if (event_gotsig || base->event_break) 382 » » » if (base->event_break)
390 return; 383 return;
391 } 384 }
392 } 385 }
393 } 386 }
394 387
395 /* 388 /*
396 * Wait continously for events. We exit only if no events are left. 389 * Wait continously for events. We exit only if no events are left.
397 */ 390 */
398 391
399 int 392 int
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 if (base->event_gotterm) { 477 if (base->event_gotterm) {
485 base->event_gotterm = 0; 478 base->event_gotterm = 0;
486 break; 479 break;
487 } 480 }
488 481
489 if (base->event_break) { 482 if (base->event_break) {
490 base->event_break = 0; 483 base->event_break = 0;
491 break; 484 break;
492 } 485 }
493 486
494 /* You cannot use this interface for multi-threaded apps */
495 while (event_gotsig) {
496 event_gotsig = 0;
497 if (event_sigcb) {
498 res = (*event_sigcb)();
499 if (res == -1) {
500 errno = EINTR;
501 return (-1);
502 }
503 }
504 }
505
506 timeout_correct(base, &tv); 487 timeout_correct(base, &tv);
507 488
508 tv_p = &tv; 489 tv_p = &tv;
509 if (!base->event_count_active && !(flags & EVLOOP_NONBLOCK)) { 490 if (!base->event_count_active && !(flags & EVLOOP_NONBLOCK)) {
510 timeout_next(base, &tv_p); 491 timeout_next(base, &tv_p);
511 } else { 492 } else {
512 /* 493 /*
513 * if we have active events, we just poll new events 494 * if we have active events, we just poll new events
514 * without waiting. 495 * without waiting.
515 */ 496 */
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 /* 989 /*
1009 * No thread-safe interface needed - the information should be the same 990 * No thread-safe interface needed - the information should be the same
1010 * for all threads. 991 * for all threads.
1011 */ 992 */
1012 993
1013 const char * 994 const char *
1014 event_get_method(void) 995 event_get_method(void)
1015 { 996 {
1016 return (current_base->evsel->name); 997 return (current_base->evsel->name);
1017 } 998 }
OLDNEW
« base/third_party/libevent/chromium.patch ('K') | « base/third_party/libevent/chromium.patch ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698