third_party/go: patch embedded etcd to prevent spurious panics
This channel double-close tends to panic etcd if we end up calling
server.Close more than once. It seems like a programming bug in etcd
upstream, this function should be otherwise safe to call more than once.
Change-Id: Iba93dc58202f22f966af251b7424d5d4c4e10612
Reviewed-on: https://review.monogon.dev/c/monogon/+/1353
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
Tested-by: Jenkins CI
diff --git a/third_party/go/patches/etcd-fix-embed-close.patch b/third_party/go/patches/etcd-fix-embed-close.patch
new file mode 100644
index 0000000..99aae88
--- /dev/null
+++ b/third_party/go/patches/etcd-fix-embed-close.patch
@@ -0,0 +1,11 @@
+diff -ur io_etcd_go_etcd_server_v3.orig/embed/etcd.go io_etcd_go_etcd_server_v3/embed/etcd.go
+--- io_etcd_go_etcd_server_v3.orig/embed/etcd.go 2023-03-16 12:53:08.416697099 +0100
++++ io_etcd_go_etcd_server_v3/embed/etcd.go 2023-03-16 12:54:27.376650809 +0100
+@@ -427,6 +426,7 @@
+ }
+ if e.errc != nil {
+ close(e.errc)
++ e.errc = nil
+ }
+ }
+
diff --git a/third_party/go/repositories.bzl b/third_party/go/repositories.bzl
index 8b99029..8da736a 100644
--- a/third_party/go/repositories.bzl
+++ b/third_party/go/repositories.bzl
@@ -5505,6 +5505,10 @@
name = "io_etcd_go_etcd_server_v3",
build_file_proto_mode = "disable",
importpath = "go.etcd.io/etcd/server/v3",
+ patch_args = ["-p1"],
+ patches = [
+ "//third_party/go/patches:etcd-fix-embed-close.patch",
+ ],
sum = "h1:CMAZd0g8Bn5NRhynW6pKhc4FRg41/0QYy3d7aNm9874=",
version = "v3.5.4",
)