Add workaround for bulkBarrierPreWrite: unaligned arguments panic

This commit is contained in:
世界 2024-12-10 13:04:55 +08:00
parent 746f63a9ac
commit 69f8d7fa72
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
4 changed files with 24 additions and 18 deletions

View file

@ -139,17 +139,17 @@ func (s *platformInterfaceStub) SendNotification(notification *platform.Notifica
return nil return nil
} }
func FormatConfig(configContent string) (string, error) { func FormatConfig(configContent string) (*StringBox, error) {
options, err := parseConfig(configContent) options, err := parseConfig(configContent)
if err != nil { if err != nil {
return "", err return nil, err
} }
var buffer bytes.Buffer var buffer bytes.Buffer
encoder := json.NewEncoder(&buffer) encoder := json.NewEncoder(&buffer)
encoder.SetIndent("", " ") encoder.SetIndent("", " ")
err = encoder.Encode(options) err = encoder.Encode(options)
if err != nil { if err != nil {
return "", err return nil, err
} }
return buffer.String(), nil return wrapString(buffer.String()), nil
} }

View file

@ -50,8 +50,7 @@ type HTTPRequest interface {
} }
type HTTPResponse interface { type HTTPResponse interface {
GetContent() ([]byte, error) GetContent() (*StringBox, error)
GetContentString() (string, error)
WriteTo(path string) error WriteTo(path string) error
} }
@ -210,27 +209,22 @@ type httpResponse struct {
} }
func (h *httpResponse) errorString() string { func (h *httpResponse) errorString() string {
content, err := h.GetContentString() content, err := h.GetContent()
if err != nil { if err != nil {
return fmt.Sprint("HTTP ", h.Status) return fmt.Sprint("HTTP ", h.Status)
} }
return fmt.Sprint("HTTP ", h.Status, ": ", content) return fmt.Sprint("HTTP ", h.Status, ": ", content)
} }
func (h *httpResponse) GetContent() ([]byte, error) { func (h *httpResponse) GetContent() (*StringBox, error) {
h.getContentOnce.Do(func() { h.getContentOnce.Do(func() {
defer h.Body.Close() defer h.Body.Close()
h.content, h.contentError = io.ReadAll(h.Body) h.content, h.contentError = io.ReadAll(h.Body)
}) })
return h.content, h.contentError if h.contentError != nil {
} return nil, h.contentError
func (h *httpResponse) GetContentString() (string, error) {
content, err := h.GetContent()
if err != nil {
return "", err
} }
return string(content), nil return wrapString(string(h.content)), nil
} }
func (h *httpResponse) WriteTo(path string) error { func (h *httpResponse) WriteTo(path string) error {

View file

@ -0,0 +1,12 @@
package libbox
// https://github.com/golang/go/issues/46893
// TODO: remove after `bulkBarrierPreWrite: unaligned arguments` fixed
type StringBox struct {
Value string
}
func wrapString(value string) *StringBox {
return &StringBox{Value: value}
}

View file

@ -13,12 +13,12 @@ func ClearServiceError() {
os.Remove(serviceErrorPath()) os.Remove(serviceErrorPath())
} }
func ReadServiceError() (string, error) { func ReadServiceError() (*StringBox, error) {
data, err := os.ReadFile(serviceErrorPath()) data, err := os.ReadFile(serviceErrorPath())
if err == nil { if err == nil {
os.Remove(serviceErrorPath()) os.Remove(serviceErrorPath())
} }
return string(data), err return wrapString(string(data)), err
} }
func WriteServiceError(message string) error { func WriteServiceError(message string) error {