Skip to content

shpool attach hangs forever #347

@wade-tregaskis

Description

@wade-tregaskis

AI Policy Ack
Ack.

What happened
Sometimes shpool just hangs (forever) when I try to attach.

What I expected to happen
It should attach, not hang.

To Reproduce
shpool attach Foo

I've no idea what gets it into this hanging state, but I suspect it's similar to whatever makes it exit immediately on an attempt to attach (#335).

Version info
shpool 0.9.5 (cl/902926829)

Logs

2026-04-24T01:51:17.999829Z  INFO ThreadId(01) loading config from "/etc/shpool/config.toml"
2026-04-24T01:51:17.999941Z  WARN ThreadId(01) skip reading config file /etc/shpool/config.toml: Os { code: 2, kind: NotFound, message: "No such file or directory" }
2026-04-24T01:51:17.999967Z  INFO ThreadId(01) loading config from "~/.config/shpool/config.toml"
2026-04-24T01:51:17.999990Z  WARN ThreadId(01) skip reading config file ~/.config/shpool/config.toml: Os { code: 2, kind: NotFound, message: "No such file or directory" }
2026-04-24T01:51:18.000006Z  INFO ThreadId(01) starting with config: Config { norc: None, noecho: None, nosymlink_ssh_auth_sock: None, noread_etc_environment: None, nodaemonize: None, nodaemonize_timeout: None, shell: None, env: None, default_dir: None, forward_env: None, initial_path: None, session_restore_mode: None, session_restore_engine: None, output_spool_lines: None, vt100_output_spool_width: None, keybinding: None, prompt_prefix: None, motd: None, motd_args: None }
2026-04-24T01:51:18.000047Z  INFO ThreadId(01) new: new
2026-04-24T01:51:18.000115Z  INFO ThreadId(01) new:with_debounce: new
2026-04-24T01:51:18.000563Z  INFO ThreadId(01) new:with_debounce: close time.busy=424µs time.idle=23.0µs
2026-04-24T01:51:18.000607Z  INFO ThreadId(01) new: close time.busy=494µs time.idle=65.9µs
2026-04-24T01:51:18.000625Z  INFO ThreadId(01) watch: new
2026-04-24T01:51:18.000799Z  INFO ThreadId(03) run: new
2026-04-24T01:51:18.000917Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 60616937 } select with ddl None
2026-04-24T01:51:18.000989Z DEBUG ThreadId(03) run: addwatch: "/etc/shpool/config.toml"
2026-04-24T01:51:18.002544Z DEBUG ThreadId(03) run: Actually watching /etc, ic Some("shpool")
2026-04-24T01:51:18.002640Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 62343212 } select with ddl None
2026-04-24T01:51:18.002719Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/passwd.cache"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.002748Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/passwd.cache"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.002763Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.002777Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 62480442 } select with ddl None
2026-04-24T01:51:18.002790Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.002804Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.002826Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.002839Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 62541885 } select with ddl None
2026-04-24T01:51:18.002717Z  INFO ThreadId(01) watch: close time.busy=2.07ms time.idle=14.6µs
2026-04-24T01:51:18.002919Z  INFO ThreadId(01) watch: new
2026-04-24T01:51:18.002995Z DEBUG ThreadId(03) run: addwatch: "~/.config/shpool/config.toml"
2026-04-24T01:51:18.003417Z DEBUG ThreadId(03) run: Actually watching ~/.config, ic Some("shpool")
2026-04-24T01:51:18.003496Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 63198692 } select with ddl None
2026-04-24T01:51:18.003513Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group.cache.ixgid"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.003529Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group.cache.ixgid"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.003537Z  INFO ThreadId(01) watch: close time.busy=598µs time.idle=19.9µs
2026-04-24T01:51:18.003544Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.003621Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 63324510 } select with ddl None
2026-04-24T01:51:18.003706Z  INFO ThreadId(01) daemon already running on "/run/user/122247/shpool/shpool.socket", no need to autodaemonize
2026-04-24T01:51:18.003753Z  INFO ThreadId(01) 

======================== STARTING ATTACH ============================


2026-04-24T01:51:18.004912Z  INFO ThreadId(01) read daemon version header: VersionHeader { version: "0.3.4" }
2026-04-24T01:51:18.004997Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.005089Z  INFO ThreadId(01) local env keys: ["TERM", "DISPLAY", "LANG", "SSH_AUTH_SOCK"]
2026-04-24T01:51:18.005138Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.005240Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.005259Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 64962176 } select with ddl None
2026-04-24T01:51:18.005276Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.005308Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.005331Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.005347Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 65049921 } select with ddl None
2026-04-24T01:51:18.005363Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.005378Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.005392Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.005404Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 65107070 } select with ddl None
2026-04-24T01:51:18.005421Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.005437Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
2026-04-24T01:51:18.005454Z DEBUG ThreadId(03) run: rewatch = Some([]), reload = false
2026-04-24T01:51:18.005466Z DEBUG ThreadId(03) run: now Instant { tv_sec: 297353, tv_nsec: 65169239 } select with ddl None
2026-04-24T01:51:18.005478Z DEBUG ThreadId(03) run: event: Ok(Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None })
2026-04-24T01:51:18.005492Z DEBUG ThreadId(03) run: ignore Event { kind: Access(Open(Any)), paths: ["/etc/group"], attr:tracker: None, attr:flag: None, attr:info: None, attr:source: None }
…

(that repeats forever)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions