Richard Fuchs
ad308c149e
here we go with the subtle race conditions
13 years ago
Richard Fuchs
0050f57de6
dont abort polling on EINTR
13 years ago
Richard Fuchs
de7ef884fa
and for the interesting part: multiple poller threads
13 years ago
Richard Fuchs
c44673113d
move poller timers and polling into a separate thread
13 years ago
Richard Fuchs
0eb3694422
making main() pretty by moving stuff out of the way
13 years ago
Richard Fuchs
e5aa11aa6b
global xmlrpc init must be done prior to any threading
13 years ago
Richard Fuchs
22043b686f
alarms arent usable in a threaded environment, so use curl internal timeout instead
13 years ago
Richard Fuchs
4304bf48c2
must extract needed tags for xmlrpc call teardown prior to destroying the calls
13 years ago
Richard Fuchs
358a194dcc
moving call teardown due to timeout to a separate thread
13 years ago
Richard Fuchs
c8c2928cef
it makes no sense to return a value from an effectively detached thread
13 years ago
Richard Fuchs
c5aa1e33f4
detached threads considered harmful, so simulate them by keeping a threads-to-join list
13 years ago
Richard Fuchs
61ffa69282
use sigtimedwait for proper sighandler thread shutdown
13 years ago
Richard Fuchs
5cecf39605
lets get some threads going then, starting with a signal handler
13 years ago
Richard Fuchs
bfcfc7b471
keeping the lock hold time to a minimum in lengthy calls_status operation
13 years ago
Richard Fuchs
95d9de7bc4
make the stats collection thread-safe
13 years ago
Richard Fuchs
c19b99903c
lets try with a lot of large, nested, naive locks
13 years ago
Richard Fuchs
28ac7b996c
getting rid of call->log_info and introducing call->lock
13 years ago
Richard Fuchs
9fecc4d153
make the callmaster struct private - also requires update to redis module
13 years ago
Richard Fuchs
e02b5398ce
granular lock for "ports used" bit field
13 years ago
Richard Fuchs
dd48d554c9
TOS for ipv6 needs an int to work
13 years ago
Richard Fuchs
1b20dcaa44
gonna need more than one lock in callmaster, so rename the one we have
13 years ago
Richard Fuchs
8d4703e2c7
need to handle the no-reply case to avoid deadlocks with bad cookies
13 years ago
Richard Fuchs
0dac780f86
getting rid of more global variables
13 years ago
Richard Fuchs
c8021adadf
EINTR requires special handling
13 years ago
Richard Fuchs
d07194897b
living on the edge with epoll edge-triggered behavior
13 years ago
Richard Fuchs
8edc107f2d
using thread-local-storage for eliminating constant calls to time()
13 years ago
Richard Fuchs
107113eefc
it helps to actually initialize the condition var
13 years ago
Richard Fuchs
24a6815e87
preliminary attempt to make the udp controller thread-safe
13 years ago
Richard Fuchs
161b2eec6a
private structs make for safer threading
13 years ago
Richard Fuchs
c24514404e
missing a streambuf lock here
13 years ago
Richard Fuchs
984899d913
and the tcp controller becomes thread-safe
13 years ago
Richard Fuchs
86a4cc8876
add appropriate threading compile flags
13 years ago
Richard Fuchs
0a18880d36
make use of "make debug" target
13 years ago
Richard Fuchs
2905c333f7
making timers thread-safe
13 years ago
Richard Fuchs
229cb3c3ce
use obj_* to catch double-free errors
13 years ago
Richard Fuchs
aa261d2a66
add mutex_trylock primitives
13 years ago
Richard Fuchs
e01692c297
add basic locking to callmaster struct
13 years ago
Richard Fuchs
f6760ecc84
disable object debugging, seems to work fine
13 years ago
Richard Fuchs
0857b32eda
add rwlock type and primitives
13 years ago
Richard Fuchs
8a6f735ed9
object size isnt really a useful piece of information
13 years ago
Richard Fuchs
856c0b9cce
make the obj_ primitives more liberal to make for easier calling
13 years ago
Richard Fuchs
540d847d08
catch the inevitable disaster early and define our own mutex types. sigh. and there i was, thinking that using the glib types would make things easier.
13 years ago
Richard Fuchs
e11d55b3fb
glib < 2.32 requires use of distinct static mutex type
13 years ago
Richard Fuchs
2b63e794df
Prepare for multi-threaded operation
...
Introduce generic "objects" with reference counting primitives and automatic
resource deallocation when no refs are left ("garbage collection"). Overhaul
poller framework to make extensive use of these objects to allow for future
thread-concurrent operation.
No locking added anywhere yet except in poller. Poller is still not 100%
thread safe, but close.
Valgrind reports no errors or memleaks.
13 years ago
Richard Fuchs
135aa3decf
remove obsolete targets from makefile
13 years ago
Richard Fuchs
4a3e36bf04
mybsearch function is also obsolete
13 years ago
Richard Fuchs
1ee9782b98
dont poll kernel list when table couldnt be opened
13 years ago
Richard Fuchs
8b320e76d9
lets be more strict with timer removal
13 years ago
Richard Fuchs
52ef56d106
it's inefficient to walk the entire list of poller items every second just to look for times which we don't really use. so instead, use the linked timers list for this purpose. this is also inefficient for timer remove, but since we don't use those times anyway, we don't care.
13 years ago
Richard Fuchs
ee30ea647a
BSEARCH macro is obsoleted
13 years ago