]> Cypherpunks repositories - gostls13.git/commit
runtime: skip doInit of plugins in runtime.main
authorWang Deyu <wangdeyu.2021@bytedance.com>
Wed, 20 Aug 2025 13:33:42 +0000 (21:33 +0800)
committerGopher Robot <gobot@golang.org>
Mon, 25 Aug 2025 17:54:23 +0000 (10:54 -0700)
commitea55ca360005c607fa54304d95c6821a6ce20e7c
tree637e8e82a00f317d3577548ccc4a111711b3d4f5
parent9ae2f1fb574e879402bc5bbac1d2b5d84acce6cb
runtime: skip doInit of plugins in runtime.main

Plugins may be loaded in the user's init code.
If loading fails, md.bad is true, and doInit should not be executed.
If loading succeeds, the plugin must run modulesinit and typelinksinit
before doInit. Here is not protected by pluginsMu, and in concurrent
scenarios it is possible to obtain the moduledata of the plugin that
is still in the loading process.
Any added modules after loop starts will do their own doInit calls.
This fixes the issue introduced by CL 520375.

Fixes #75102

Change-Id: I48e91ae21615a0c54176875a6a2dea8e1dade906
Reviewed-on: https://go-review.googlesource.com/c/go/+/697675
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/cmd/cgo/internal/testplugin/plugin_test.go
src/cmd/cgo/internal/testplugin/testdata/issue75102/main.go [new file with mode: 0644]
src/cmd/cgo/internal/testplugin/testdata/issue75102/plugin.go [new file with mode: 0644]
src/runtime/proc.go