Maxime Coste
4a59018dcd
Do not select on non-urgent fd when handling only urgent events
...
This avoids 100% CPU usage when we have pending fifo input while running
a shell process, as we will not end-up busy looping in pselect but not
reading the available data due to being only processing urgent events.
2021-03-11 09:02:02 +11:00
Maxime Coste
e50b5fe137
Add Timer::disable() to be more explicit than set_next_date(TimePoint::max())
2020-12-20 11:32:15 +11:00
Maxime Coste
56e5322b45
EventManager: Never block if a forced file descriptor is present
2018-06-03 12:17:38 +10:00
Maxime Coste
fcce76ba57
Handle all pending events before redrawing
...
If new events happen while handling events, take care of those
new events as well before redrawing.
2018-05-17 07:41:32 +10:00
Maxime Coste
299e22ca7c
Do not block when waiting for next event if we have pending input
...
Handle next event should never block if we have already accumulated
input that we want to process. As we can accumulate new input in
lots of places (everytime we run a shell process for example, we
might end up reading input keys. That can be triggered during the
mode line generation which takes place during display of the window)
Fixes #1804
2018-01-21 12:00:40 +11:00
Maxime Coste
b51d19bfaa
Formatting fixes
2017-07-07 13:59:53 +09:00
Maxime Coste
db9b863222
Migrate WithBitOps template specialization to with_bit_ops function
...
This way we dont depend on knowing the base template to enable bit ops
on an enum type.
2017-03-15 18:00:58 +00:00
Maxime Coste
dcd8f6ef01
Apply clang-tidy modernize to the codebase
2017-01-08 22:39:01 +00:00
Maxime Coste
7defdd3039
Make FDWatcher support Read, Write and Except events, instead of just Read
2016-12-01 19:44:07 +00:00
Maxime Coste
3a81260917
Simplify greatly UI input handling
...
This round trip through an input callback expected to call
is_key_available and get_key was overcomplicated, just send the
keys as they arrive, the client is already buffering due to urgent
event mode.
2016-11-29 21:59:36 +00:00
Maxime Coste
2f3a7112ea
Add more memory domains to certain data
2016-11-28 13:59:55 +00:00
Maxime Coste
46a15534c5
Introduce chrono.hh
2016-07-24 21:25:05 +01:00
Maxime Coste
032219b119
Rename set_signal_wrapper to set_signal_handler and tweak SignalHandler def
2016-01-10 20:46:15 +00:00
Daniel Robertson
f5f7bc80e8
Add a signal function using sigaction
...
Use a wrapper for sigaction in place of signal to ensure that the
SA_RESTART flag is set for all signals used.
Signed-off-by: Daniel Robertson <danlrobertson89@gmail.com>
2015-12-23 14:03:31 -05:00
Maxime Coste
bb96ad44b2
Refactor ShellManager process spawning
2015-10-02 13:37:06 +01:00
Maxime Coste
e5852f6822
Fix race condition ShellManager::eval with SIGCHLD
2015-06-09 20:28:24 +01:00
Maxime Coste
da562e03a0
replace all std::vector with Vector
2015-01-12 13:58:41 +00:00
Maxime Coste
2852e0fbe5
Remove trailing blank lines
2014-12-23 23:00:20 +00:00
Maxime Coste
e0cc59914e
Fix OSX compilation
2014-12-10 20:54:47 +00:00
Maxime Coste
319cfcda34
Get rid of uses of unordered_set, vector is just simpler and faster...
2014-12-09 21:59:47 +00:00
Maxime Coste
0517a19e6d
Use a select based event handling and fix deadlock
2014-12-03 13:56:02 +00:00
Maxime Coste
a3b3001d8f
Rework client pending key handling, fix insert/normal timers
2014-11-29 20:14:52 +00:00
Maxime Coste
49931fbf05
Separate events between normal and urgent ones
...
Run urgent ones while executing %sh blocks.
Fixes #236
2014-11-25 13:52:06 +00:00
Maxime Coste
2a23ce1987
FDWatchers are non copiable and non movable
2014-03-25 09:15:56 +00:00
Maxime Coste
edef8e4e98
Remove Set and use unordered_set
2013-01-31 18:58:25 +01:00
Maxime Coste
90eeb7b8a7
EventManager: add support for timers
2013-01-14 19:07:38 +01:00
Maxime Coste
914ede7a82
Add and use a Set template class for recuring small sets
2013-01-11 14:28:13 +01:00
Maxime Coste
79d28e68dc
Refactor EventManager
...
Watching a file descriptor is now done using a FDWatcher object
2013-01-10 19:10:42 +01:00
Maxime Coste
9e3c1c74c5
EventManager: fix forced event processing
...
previous implementation could drop some forced events.
2012-12-03 18:49:09 +01:00
Maxime Coste
6ca530b5cc
EventManager: refactor (again)
2012-11-27 13:57:03 +01:00
Maxime Coste
91d2cc38e5
EventManager: avoid erasing an event handler while it may be in use
2012-11-26 14:08:27 +01:00
Maxime Coste
d347223e42
EventManager: store event handlers in an unordered_map instead of a vector
...
If an event handler add or removes an event from the manager, it may then
be moved in the vector, and if after that it access any of it's members
(through this), it results in an invalid memory access.
2012-11-06 13:34:58 +01:00
Maxime Coste
70cdb7a811
EventManager: add force_signal method to force event execution
2012-10-27 15:01:13 +02:00
Maxime Coste
ab47b72dc8
add a poll based EventManager and use it for ncurse client update
2012-08-28 22:32:15 +02:00