mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-03 15:53:56 +00:00
fix: CoreAPI lifecycle - don't FreeCoreAPI until Stop
- Move FreeCoreAPI from defer in Start() to Stop() - Call handle.Stop() before freeing resources - This prevents SIGSEGV from plugins accessing freed CoreAPI memory - Plugin's Go bridge code is safe (no C memory bugs)
This commit is contained in:
@ -60,13 +60,10 @@ type cabiPlugin struct {
|
|||||||
|
|
||||||
func (p *cabiPlugin) Name() string { return p.name }
|
func (p *cabiPlugin) Name() string { return p.name }
|
||||||
func (p *cabiPlugin) Start(s *sdk.PluginSDK) error {
|
func (p *cabiPlugin) Start(s *sdk.PluginSDK) error {
|
||||||
// Create CoreAPI backed by the real PluginSDK and pass to plugin
|
|
||||||
corePtr := p.handle.CreateCoreAPI(s)
|
corePtr := p.handle.CreateCoreAPI(s)
|
||||||
if corePtr == nil {
|
if corePtr == nil {
|
||||||
return fmt.Errorf("cabi: failed to create CoreAPI for %s", p.name)
|
return fmt.Errorf("cabi: failed to create CoreAPI for %s", p.name)
|
||||||
}
|
}
|
||||||
defer p.handle.FreeCoreAPI()
|
|
||||||
|
|
||||||
if err := p.handle.Start(corePtr); err != nil {
|
if err := p.handle.Start(corePtr); err != nil {
|
||||||
return fmt.Errorf("cabi: start %s: %w", p.name, err)
|
return fmt.Errorf("cabi: start %s: %w", p.name, err)
|
||||||
}
|
}
|
||||||
@ -74,6 +71,8 @@ func (p *cabiPlugin) Start(s *sdk.PluginSDK) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *cabiPlugin) Stop() error {
|
func (p *cabiPlugin) Stop() error {
|
||||||
|
_ = p.handle.Stop()
|
||||||
|
p.handle.FreeCoreAPI()
|
||||||
p.handle.Close()
|
p.handle.Close()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user