Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data Race in ACMEIssuer #195

Closed
zllovesuki opened this issue Jul 30, 2022 · 5 comments
Closed

Data Race in ACMEIssuer #195

zllovesuki opened this issue Jul 30, 2022 · 5 comments
Labels
bug Something isn't working

Comments

@zllovesuki
Copy link

zllovesuki commented Jul 30, 2022

What version of the package are you using?

rachel@V:~/code/specter$ cat go.sum | grep magic
github.com/caddyserver/certmagic v0.16.1 h1:rdSnjcUVJojmL4M0efJ+yHXErrrijS4YYg3FuwRdJkI=
github.com/caddyserver/certmagic v0.16.1/go.mod h1:jKQ5n+ViHAr6DbPwEGLTSM2vDwTO6EvCKBblBRUvvuQ=

What are you trying to do?

Using certmagic with advanced setup to manage certificate automatically.

What steps did you take?

This is what I'm using to setup certmagic:

func configSolver(ctx *cli.Context, logger *zap.Logger) acmez.Solver {
	switch CertCA {
	case certmagic.LetsEncryptProductionCA:
		// TODO: to be implemented
		return nil
	default:
		return &NoopSolver{logger: logger}
	}
}

func configACME(ctx *cli.Context, logger *zap.Logger) *certmagic.Config {
	gg := certmagic.NewDefault()
	gg.DefaultServerName = ctx.String("zone")
	gg.Logger = logger.With(zap.String("component", "acme"))

	issuer := certmagic.NewACMEIssuer(gg, certmagic.ACMEIssuer{
		CA:          CertCA,
		Email:       ctx.String("email"),
		Agreed:      true,
		DNS01Solver: configSolver(ctx, logger),
		Logger:      logger.With(zap.String("component", "issuer")),
	})
	gg.Issuers = []certmagic.Issuer{issuer}
	return gg
}

After the function returns, this is how I invoke certmagic to get certs:

	rootDomain := ctx.String("zone")
	magic := configACME(ctx, logger)
	magic.ManageAsync(ctx.Context, []string{rootDomain, "*." + rootDomain})

	gwTLSConf := cipher.GetGatewayTLSConfig(magic.GetCertificate, []string{
		tun.ALPN(protocol.Link_HTTP2),
	})

The binary was compiled in docker with the -race flag, with pebble, test server from LE to not validate challenge (so all cert request will be approved, hence the NoopSolver).

What did you expect to happen, and what actually happened instead?

Expectation: certmagic obtained certificate and the race detector is happy about it.
Reality: certmagic did obtain the certificate, but race detector complained about unsafe concurrent access:

specter-seed-1          | 2022-07-30T00:39:59.048Z      INFO    obtain  certmagic@v0.16.1/config.go:489 lock acquired   {"component": "acme", "identifier": "*.dev.con.nect.sh"}
specter-seed-1          | 2022-07-30T00:39:59.048Z      INFO    obtain  certmagic@v0.16.1/config.go:489 lock acquired   {"component": "acme", "identifier": "dev.con.nect.sh"}
specter-seed-1          | 2022-07-30T00:39:59.049Z      DEBUG   obtain  certmagic@v0.16.1/config.go:528 trying issuer 1/1       {"component": "acme", "issuer": "pebble:14000-dir"}
specter-seed-1          | 2022-07-30T00:39:59.049Z      DEBUG   obtain  certmagic@v0.16.1/config.go:528 trying issuer 1/1       {"component": "acme", "issuer": "pebble:14000-dir"}
specter-seed-1          | ==================
specter-seed-1          | WARNING: DATA RACE
specter-seed-1          | Read at 0x00c0004b4120 by goroutine 10:
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).getEmail()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/account.go:182 +0x4d
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).PreCheck()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:229 +0xfe
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:533 +0xd05
specter-seed-1          |   github.com/caddyserver/certmagic.doWithRetry()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:106 +0x26a
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:592 +0x806
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ObtainCertAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:443 +0xc4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne.func1()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:340 +0xc5
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).worker()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:73 +0x1cb
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x39
specter-seed-1          |
specter-seed-1          | Previous write at 0x00c0004b4120 by goroutine 9:
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).getEmail()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/account.go:220 +0x248
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).PreCheck()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:229 +0xfe
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:533 +0xd05
specter-seed-1          |   github.com/caddyserver/certmagic.doWithRetry()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:106 +0x26a
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:592 +0x806
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ObtainCertAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:443 +0xc4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne.func1()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:340 +0xc5
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).worker()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:73 +0x1cb
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x39
specter-seed-1          |
specter-seed-1          | Goroutine 10 (running) created at:
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x419
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:366 +0x451
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageAll()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:320 +0x1b9
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ManageAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:279 +0x52e
specter-seed-1          |   kon.nect.sh/specter/cmd.cmdServer()
specter-seed-1          |       /app/cmd/server.go:162 +0x475
specter-seed-1          |   github.com/urfave/cli/v2.(*Command).Run()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/command.go:169 +0xf36
specter-seed-1          |   github.com/urfave/cli/v2.(*App).RunContext()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/app.go:378 +0x11fc
specter-seed-1          |   main.main()
specter-seed-1          |       /app/main.go:65 +0x4b6
specter-seed-1          |
specter-seed-1          | Goroutine 9 (running) created at:
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x419
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:366 +0x451
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageAll()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:320 +0x1b9
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ManageAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:279 +0x52e
specter-seed-1          |   kon.nect.sh/specter/cmd.cmdServer()
specter-seed-1          |       /app/cmd/server.go:162 +0x475
specter-seed-1          |   github.com/urfave/cli/v2.(*Command).Run()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/command.go:169 +0xf36
specter-seed-1          |   github.com/urfave/cli/v2.(*App).RunContext()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/app.go:378 +0x11fc
specter-seed-1          |   main.main()
specter-seed-1          |       /app/main.go:65 +0x4b6
specter-seed-1          | ==================
specter-seed-1          | ==================
specter-seed-1          | WARNING: DATA RACE
specter-seed-1          | Read at 0x00c0004b41f8 by goroutine 10:
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).newACMEClient()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeclient.go:183 +0x5bc
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).newACMEClientWithAccount()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeclient.go:54 +0x72
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).doIssue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:301 +0x84
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).Issue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:244 +0xf4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:539 +0xd45
specter-seed-1          |   github.com/caddyserver/certmagic.doWithRetry()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:106 +0x26a
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:592 +0x806
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ObtainCertAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:443 +0xc4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne.func1()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:340 +0xc5
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).worker()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:73 +0x1cb
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x39
specter-seed-1          |
specter-seed-1          | Previous write at 0x00c0004b41f8 by goroutine 9:
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).newACMEClient()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeclient.go:204 +0xa51
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).newACMEClientWithAccount()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeclient.go:54 +0x72
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).doIssue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:301 +0x84
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).Issue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:244 +0xf4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:539 +0xd45
specter-seed-1          |   github.com/caddyserver/certmagic.doWithRetry()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:106 +0x26a
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:592 +0x806
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ObtainCertAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:443 +0xc4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne.func1()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:340 +0xc5
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).worker()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:73 +0x1cb
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x39
specter-seed-1          |
specter-seed-1          | Goroutine 10 (running) created at:
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x419
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:366 +0x451
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageAll()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:320 +0x1b9
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ManageAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:279 +0x52e
specter-seed-1          |   kon.nect.sh/specter/cmd.cmdServer()
specter-seed-1          |       /app/cmd/server.go:162 +0x475
specter-seed-1          |   github.com/urfave/cli/v2.(*Command).Run()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/command.go:169 +0xf36
specter-seed-1          |   github.com/urfave/cli/v2.(*App).RunContext()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/app.go:378 +0x11fc
specter-seed-1          |   main.main()
specter-seed-1          |       /app/main.go:65 +0x4b6
specter-seed-1          |
specter-seed-1          | Goroutine 9 (running) created at:
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x419
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:366 +0x451
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageAll()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:320 +0x1b9
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ManageAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:279 +0x52e
specter-seed-1          |   kon.nect.sh/specter/cmd.cmdServer()
specter-seed-1          |       /app/cmd/server.go:162 +0x475
specter-seed-1          |   github.com/urfave/cli/v2.(*Command).Run()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/command.go:169 +0xf36
specter-seed-1          |   github.com/urfave/cli/v2.(*App).RunContext()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/app.go:378 +0x11fc
specter-seed-1          |   main.main()
specter-seed-1          |       /app/main.go:65 +0x4b6
specter-seed-1          | ==================
specter-seed-1          | ==================
specter-seed-1          | WARNING: DATA RACE
specter-seed-1          | Write at 0x00c0004b4140 by goroutine 10:
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).newACMEClientWithAccount()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeclient.go:100 +0x96f
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).doIssue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:301 +0x84
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).Issue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:244 +0xf4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:539 +0xd45
specter-seed-1          |   github.com/caddyserver/certmagic.doWithRetry()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:106 +0x26a
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:592 +0x806
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ObtainCertAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:443 +0xc4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne.func1()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:340 +0xc5
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).worker()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:73 +0x1cb
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x39
specter-seed-1          |
specter-seed-1          | Previous write at 0x00c0004b4140 by goroutine 9:
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).newACMEClientWithAccount()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeclient.go:100 +0x96f
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).doIssue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:301 +0x84
specter-seed-1          |   github.com/caddyserver/certmagic.(*ACMEIssuer).Issue()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/acmeissuer.go:244 +0xf4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:539 +0xd45
specter-seed-1          |   github.com/caddyserver/certmagic.doWithRetry()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:106 +0x26a
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).obtainCert()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:592 +0x806
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ObtainCertAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:443 +0xc4
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne.func1()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:340 +0xc5
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).worker()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:73 +0x1cb
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit.func2()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x39
specter-seed-1          |
specter-seed-1          | Goroutine 10 (running) created at:
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x419
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:366 +0x451
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageAll()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:320 +0x1b9
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ManageAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:279 +0x52e
specter-seed-1          |   kon.nect.sh/specter/cmd.cmdServer()
specter-seed-1          |       /app/cmd/server.go:162 +0x475
specter-seed-1          |   github.com/urfave/cli/v2.(*Command).Run()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/command.go:169 +0xf36
specter-seed-1          |   github.com/urfave/cli/v2.(*App).RunContext()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/app.go:378 +0x11fc
specter-seed-1          |   main.main()
specter-seed-1          |       /app/main.go:65 +0x4b6
specter-seed-1          |
specter-seed-1          | Goroutine 9 (running) created at:
specter-seed-1          |   github.com/caddyserver/certmagic.(*jobManager).Submit()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/async.go:50 +0x419
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageOne()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:366 +0x451
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).manageAll()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:320 +0x1b9
specter-seed-1          |   github.com/caddyserver/certmagic.(*Config).ManageAsync()
specter-seed-1          |       /go/pkg/mod/github.com/caddyserver/certmagic@v0.16.1/config.go:279 +0x52e
specter-seed-1          |   kon.nect.sh/specter/cmd.cmdServer()
specter-seed-1          |       /app/cmd/server.go:162 +0x475
specter-seed-1          |   github.com/urfave/cli/v2.(*Command).Run()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/command.go:169 +0xf36
specter-seed-1          |   github.com/urfave/cli/v2.(*App).RunContext()
specter-seed-1          |       /go/pkg/mod/github.com/urfave/cli/v2@v2.11.1/app.go:378 +0x11fc
specter-seed-1          |   main.main()
specter-seed-1          |       /app/main.go:65 +0x4b6
specter-seed-1          | ==================
specter-pebble-1        | Pebble 2022/07/30 00:39:59 GET /dir -> calling handler()
specter-seed-1          | 2022-07-30T00:39:59.121Z      DEBUG   acme_client     acme/http.go:270        http request    {"component": "issuer", "method": "GET", "url": "https://pebble:14000/dir", "headers": {"User-Agent":["CertMagic acmez (linux; amd64)"]}, "response_headers": {"Cache-Control":["public, max-age=0, no-cache"],"Content-Length":["391"],"Content-Type":["application/json; charset=utf-8"],"Date":["Sat, 30 Jul 2022 00:39:59 GMT"]}, "status_code": 200}
specter-pebble-1        | Pebble 2022/07/30 00:39:59 HEAD /nonce-plz -> calling handler()
specter-pebble-1        | Pebble 2022/07/30 00:39:59 HEAD /nonce-plz -> calling handler()

How do you think this should be fixed?

(will update this section once I read through the code)

@mholt
Copy link
Member

mholt commented Jul 30, 2022

Oh yeah, I think this is a known issue. There should be a TODO in the code. I'll look closer when I'm not mobile. Thanks!

@mholt
Copy link
Member

mholt commented Jul 30, 2022

Okay, so it's not quite the same as the known issue, which was apparently fixed but I forgot that I fixed it. It's very similar though.

Edit: But the second race IS a known issue and does have a TODO: comment: "Is this racey?" -- lol. So I guess it is.

@mholt mholt added the bug Something isn't working label Jul 30, 2022
@mholt mholt closed this as completed in 5981e55 Aug 2, 2022
@mholt
Copy link
Member

mholt commented Aug 2, 2022

Thanks for the detailed report @zllovesuki -- should be fixed now. Would you be able to give it a try? 😃

@zllovesuki
Copy link
Author

rachel@V:~/code/specter$ cat go.mod go.sum | grep magic                                                                                                                                                                                                                                                           github.com/caddyserver/certmagic v0.16.2-0.20220802050411-5981e55018f5
github.com/caddyserver/certmagic v0.16.1 h1:rdSnjcUVJojmL4M0efJ+yHXErrrijS4YYg3FuwRdJkI=
github.com/caddyserver/certmagic v0.16.1/go.mod h1:jKQ5n+ViHAr6DbPwEGLTSM2vDwTO6EvCKBblBRUvvuQ=
github.com/caddyserver/certmagic v0.16.2-0.20220802050411-5981e55018f5 h1:rpV8AEtz4gcOt+81UehIX9uD8rXANlbYcSJsFWtEcxI=
github.com/caddyserver/certmagic v0.16.2-0.20220802050411-5981e55018f5/go.mod h1:jKQ5n+ViHAr6DbPwEGLTSM2vDwTO6EvCKBblBRUvvuQ=

can confirm that race detector is now happy 👍

@mholt
Copy link
Member

mholt commented Aug 2, 2022

Awesome!! Thanks for verifying.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants