Skip to content

Commit b8c8fae

Browse files
committed
inspan guard
1 parent e4527d0 commit b8c8fae

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

lightning-macros/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ pub fn auto_span_methods(_attr: TokenStream, item: TokenStream) -> TokenStream {
417417
let block = &method.block;
418418
let method_name = method.sig.ident.to_string();
419419
method.block = syn::parse_quote!({
420-
let _node_span = enter_instance_span(self.node_id.clone()).entered();
420+
let _node_span = enter_instance_span(self.node_id.clone()).map(|s|(s.entered(), InSpanGuard{}));
421421
let _method_span = tracing::span!(tracing::Level::INFO, #method_name).entered();
422422
#block
423423
});

lightning/src/ln/channelmanager.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,9 +1893,30 @@ where
18931893
thread_local! {
18941894
static CURRENT_INSTANCE: RefCell<Option<String>> = RefCell::new(None);
18951895
static CURRENT_SPAN: RefCell<Option<Span>> = RefCell::new(None);
1896+
static IN_SPAN: RefCell<bool> = RefCell::new(false);
18961897
}
18971898

1898-
fn enter_instance_span(name: String) -> tracing::span::Span {
1899+
struct InSpanGuard {}
1900+
1901+
impl Drop for InSpanGuard {
1902+
fn drop(&mut self) {
1903+
IN_SPAN.with(|in_span| {
1904+
*in_span.borrow_mut() = false;
1905+
});
1906+
}
1907+
}
1908+
1909+
fn enter_instance_span(name: String) -> Option<tracing::span::Span> {
1910+
// return None is IN_SPAN
1911+
if IN_SPAN.with(|in_span| *in_span.borrow()) {
1912+
return None;
1913+
}
1914+
1915+
// set IN_SPAN to true
1916+
IN_SPAN.with(|in_span| {
1917+
*in_span.borrow_mut() = true;
1918+
});
1919+
18991920
let mut span_to_enter: Option<Span> = None;
19001921

19011922
CURRENT_INSTANCE.with(|current_name| {
@@ -1917,7 +1938,7 @@ fn enter_instance_span(name: String) -> tracing::span::Span {
19171938
}
19181939
});
19191940

1920-
span_to_enter.unwrap()
1941+
span_to_enter
19211942
}
19221943

19231944
/// A lightning node's channel state machine and payment management logic, which facilitates

lightning/src/ln/payment_tests.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -434,12 +434,10 @@ fn mpp_receive_timeout() {
434434

435435
#[test]
436436
fn test_keysend_payments() {
437-
let layer = HierarchicalLayer::new(5) // indent by 2 spaces
437+
let layer = HierarchicalLayer::new(3) // indent by 2 spaces
438438
.with_ansi(true)
439439
.with_targets(true)
440440
.with_deferred_spans(true);
441-
//.with_indent_lines(true);
442-
443441
let subscriber = Registry::default().with(layer);
444442
tracing::subscriber::set_global_default(subscriber).unwrap();
445443

@@ -449,11 +447,11 @@ fn test_keysend_payments() {
449447
// .init();
450448

451449
do_test_keysend_payments(false);
452-
do_test_keysend_payments(true);
450+
// do_test_keysend_payments(true);
453451
}
454452

455453
fn do_test_keysend_payments(public_node: bool) {
456-
let span = tracing::info_span!("node setup");
454+
let span = tracing::info_span!("node setup").entered();
457455
let chanmon_cfgs = create_chanmon_cfgs(2);
458456
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
459457
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);

0 commit comments

Comments
 (0)