@greenart7c3 I found a bug in Citrine. Not exactly sure yet what the cause is: it happens when I have the connections window open and someone connects but it does not happen for all connections. My Citrine is available over tor so it's probably related to that.
```
android.os.NetworkOnMainThreadException
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1775)
java.net.Inet6AddressImpl.getHostByAddr(Inet6AddressImpl.java:153)
java.net.InetAddress$1.getHostByAddr(InetAddress.java:286)
java.net.InetAddress.getHostFromNameService(InetAddress.java:656)
java.net.InetAddress.getHostName(InetAddress.java:565)
java.net.InetSocketAddress$InetSocketAddressHolder.getHostName(InetSocketAddress.java:83)
java.net.InetSocketAddress$InetSocketAddressHolder.-$$Nest$mgetHostName(InetSocketAddress.java:0)
java.net.InetSocketAddress.getHostName(InetSocketAddress.java:382)
io.ktor.util.network.NetworkAddressJvmKt.getHostname(NetworkAddressJvm.kt:22)
io.ktor.server.cio.CIOConnectionPoint.getRemoteHost(CIOApplicationRequest.kt:96)
com.greenart7c3.citrine.server.Connection.remoteAddress(Connection.kt:57)
com.greenart7c3.citrine.ui.HomeScreenKt$HomeScreen$lambda$0$29$13$0$0$0$$inlined$items$default$4.invoke(LazyDsl.kt:524)
com.greenart7c3.citrine.ui.HomeScreenKt$HomeScreen$lambda$0$29$13$0$0$0$$inlined$items$default$4.invoke(LazyDsl.kt:178)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:143)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:52)
androidx.compose.foundation.lazy.LazyListItemProviderImpl.Item$lambda$0(LazyListItemProvider.kt:80)
androidx.compose.foundation.lazy.LazyListItemProviderImpl$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:122)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:52)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:398)
androidx.compose.foundation.lazy.layout.LazyLayoutPinnableItemKt.LazyLayoutPinnableItem(LazyLayoutPinnableItem.kt:56)
androidx.compose.foundation.lazy.LazyListItemProviderImpl.Item(LazyListItemProvider.kt:78)
androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactoryKt.SkippableItem_JVlU9Rs$lambda$0(LazyLayoutItemContentFactory.kt:127)
androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactoryKt$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:122)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:52)
androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:378)
androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:82)
androidx.compose.foundation.lazy.layout.LazySaveableStateHolder.SaveableStateProvider(LazySaveableStateHolder.kt:76)
androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactoryKt.SkippableItem-JVlU9Rs(LazyLayoutItemContentFactory.kt:126)
androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactoryKt.access$SkippableItem-JVlU9Rs(LazyLayoutItemContentFactory.kt:1)
androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory$CachedItemContent.createContentLambda$lambda$0(LazyLayoutItemContentFactory.kt:95)
androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory$CachedItemContent$$ExternalSyntheticLambda0.invoke(D8$$SyntheticClass:0)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:122)
androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.kt:52)
androidx.compose.runtime.internal.Expect_jvmKt.invokeComposable(Expect.jvm.kt:24)
androidx.compose.runtime.ComposerImpl.doCompose-aFTiNEg(ComposerImpl.kt:2647)
androidx.compose.runtime.ComposerImpl.composeContent--ZbOJvo$runtime(ComposerImpl.kt:2551)
androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:835)
androidx.compose.runtime.Recomposer.composeInitial$runtime(Recomposer.kt:1266)
androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime(ComposerImpl.kt:2993)
androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime(ComposerImpl.kt:2993)
androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime(ComposerImpl.kt:2993)
androidx.compose.runtime.CompositionImpl.composeInitial(Composition.kt:672)
androidx.compose.runtime.CompositionImpl.composeInitialWithReuse(Composition.kt:699)
androidx.compose.runtime.CompositionImpl.setContentWithReuse(Composition.kt:647)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:719)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:658)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose(SubcomposeLayout.kt:624)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState$Scope.subcompose(SubcomposeLayout.kt:1352)
androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl.compose(LazyLayoutMeasureScope.kt:94)
androidx.compose.foundation.lazy.layout.LazyLayoutMeasuredItemProvider.getPlaceables-3p2s80s(LazyLayoutMeasuredItem.kt:60)
androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure-0kLqBqw(LazyListMeasuredItemProvider.kt:53)
androidx.compose.foundation.lazy.LazyListMeasuredItemProvider.getAndMeasure-0kLqBqw$default(LazyListMeasuredItemProvider.kt:47)
androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-_s_dbAc(LazyListMeasure.kt:221)
androidx.compose.foundation.lazy.LazyListKt$rememberLazyListMeasurePolicy$1$1.measure-0kLqBqw(LazyList.kt:353)
androidx.compose.foundation.lazy.layout.LazyLayoutKt.LazyLayout$lambda$1$3$0(LazyLayout.kt:141)
androidx.compose.foundation.lazy.layout.LazyLayoutKt.$r8$lambda$rf3vllu87hDgmhs57JbwRZ1rpS4(Unknown Source:0)
androidx.compose.foundation.lazy.layout.LazyLayoutKt$$ExternalSyntheticLambda5.invoke(D8$$SyntheticClass:0)
androidx.compose.ui.layout.LayoutNodeSubcompositionsState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:955)
androidx.compose.ui.node.InnerNodeCoordinator.measure-BRTryo0(InnerNodeCoordinator.kt:128)
androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:843)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:190)
androidx.compose.foundation.lazy.layout.LazyLayoutBeyondBoundsProviderModifierNode.measure-3p2s80s(LazyLayoutBeyondBoundsModifierLocal.kt:122)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:190)
androidx.compose.foundation.layout.PaddingNode.measure-3p2s80s(Padding.kt:406)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:190)
androidx.compose.foundation.layout.FillNode.measure-3p2s80s(Size.kt:721)
androidx.compose.ui.node.LayoutModifierNodeCoordinator.measure-BRTryo0(LayoutModifierNodeCoordinator.kt:190)
androidx.compose.ui.node.MeasurePassDelegate$performMeasureBlock$1.invoke(MeasurePassDelegate.kt:173)
androidx.compose.ui.node.MeasurePassDelegate$performMeasureBlock$1.invoke(MeasurePassDelegate.kt:172)
androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:728)
androidx.compose.ui.node.MeasurePassDelegate.remeasure-BRTryo0(MeasurePassDelegate.kt:1064)
androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui(LayoutNode.kt:1281)
androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui$default(LayoutNode.kt:1274)
androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-sdFAvZA(MeasureAndLayoutDelegate.kt:380)
androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:595)
androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:43)
androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:402)
androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:1735)
androidx.compose.ui.node.Owner.measureAndLayout$default(Owner.kt:258)
androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:2063)
android.view.View.draw(View.java:25282)
android.view.View.updateDisplayListIfDirty(View.java:24126)
android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4551)
android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4524)
android.view.View.updateDisplayListIfDirty(View.java:24080)
android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4551)
android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4524)
android.view.View.updateDisplayListIfDirty(View.java:24080)
android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4551)
android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4524)
android.view.View.updateDisplayListIfDirty(View.java:24080)
android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4551)
android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4524)
android.view.View.updateDisplayListIfDirty(View.java:24080)
android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:727)
android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:733)
android.view.ThreadedRenderer.draw(ThreadedRenderer.java:831)
android.view.ViewRootImpl.draw(ViewRootImpl.java:5927)
android.view.ViewRootImpl.performDraw(ViewRootImpl.java:5578)
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4557)
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:3127)
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:10807)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:1630)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:1639)
android.view.Choreographer.doCallbacks(Choreographer.java:1235)
android.view.Choreographer.doFrame(Choreographer.java:1164)
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1613)
android.os.Handler.handleCallback(Handler.java:1070)
android.os.Handler.dispatchMessage(Handler.java:125)
android.os.Looper.dispatchMessage(Looper.java:333)
android.os.Looper.loopOnce(Looper.java:263)
android.os.Looper.loop(Looper.java:367)
android.app.ActivityThread.main(ActivityThread.java:9331)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:837)
```
chrizzz
npub13syp...gns9
iykyk
Which client has the "fiatjaf.com/nostr" user agent string? @fiatjaf ๐