user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 07/34] evcleanup: do not create event loop if nothing was registered
  @ 2018-03-06  8:42  5% ` Eric Wong (Contractor, The Linux Foundation)
  0 siblings, 0 replies; 2+ results
From: Eric Wong (Contractor, The Linux Foundation) @ 2018-03-06  8:42 UTC (permalink / raw)
  To: meta

This was creating an unnecessary epoll descriptor via
Danga::Socket when using V2Writable to import a mbox.  That
said, there should probably be better way of detecting whether
or not we're inside a Danga::Socket event loop.

Fixes: 427245acacaf04a8
       ("evcleanup: ensure deferred close from timers are handled ASAP")
---
 lib/PublicInbox/EvCleanup.pm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/EvCleanup.pm b/lib/PublicInbox/EvCleanup.pm
index 8ed5180..384efd3 100644
--- a/lib/PublicInbox/EvCleanup.pm
+++ b/lib/PublicInbox/EvCleanup.pm
@@ -79,8 +79,8 @@ sub later ($) {
 
 END {
 	_run_asap();
-	_run_next();
-	_run_later();
+	_run_all($nextq);
+	_run_all($laterq);
 }
 
 1;
-- 
EW


^ permalink raw reply related	[relevance 5%]

* [PATCH] evcleanup: ensure deferred close from timers are handled ASAP
@ 2016-12-26  3:05  7% Eric Wong
  0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2016-12-26  3:05 UTC (permalink / raw)
  To: meta; +Cc: Eric Wong

Danga::Socket defers close() syscalls until the end of the event
loop to avoid FD recycling.  Unfortunately, this is dependent on
IO events firing and waking the process up from
poll/kevent/epoll_wait.

Without any I/O activity, a socket could remain in the
@Danga::Socket::ToClose array indefinitely.  Thus, we will
trigger a fake IO event after running all timers to trigger
the deferred close in Danga::Socket::PostEventLoop.
---
 lib/PublicInbox/EvCleanup.pm | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/EvCleanup.pm b/lib/PublicInbox/EvCleanup.pm
index 2b77c61..b9fe843 100644
--- a/lib/PublicInbox/EvCleanup.pm
+++ b/lib/PublicInbox/EvCleanup.pm
@@ -30,9 +30,19 @@ sub _run_all ($) {
 	$_->() foreach @$run;
 }
 
+# ensure Danga::Socket::ToClose fires after timers fire
+sub _asap_close () { $asapq->[1] ||= _asap_timer() }
+
 sub _run_asap () { _run_all($asapq) }
-sub _run_next () { _run_all($nextq) }
-sub _run_later () { _run_all($laterq) }
+sub _run_next () {
+	_run_all($nextq);
+	_asap_close();
+}
+
+sub _run_later () {
+	_run_all($laterq);
+	_asap_close();
+}
 
 # Called by Danga::Socket
 sub event_write {
-- 
EW


^ permalink raw reply related	[relevance 7%]

Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2016-12-26  3:05  7% [PATCH] evcleanup: ensure deferred close from timers are handled ASAP Eric Wong
2018-03-06  8:42     [v2 PATCH 00/34] duplicate handling, smaller Xapian DBs, date fixes Eric Wong (Contractor, The Linux Foundation)
2018-03-06  8:42  5% ` [PATCH 07/34] evcleanup: do not create event loop if nothing was registered Eric Wong (Contractor, The Linux Foundation)

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).