diff options
| author | t <t@tjp.lol> | 2026-06-11 13:25:15 -0600 |
|---|---|---|
| committer | t <t@tjp.lol> | 2026-06-11 13:26:12 -0600 |
| commit | 3dcbf15bdb90e4c90e7225b82945a6862a7a063f (patch) | |
| tree | 86de1b9853cd1a0506637918d71a64483488321d /libpanto-go/panto.go | |
| parent | 6d725a9e35c3086f61cb6579d2840f5a09be450a (diff) | |
some go bindings fixes and an example app
Diffstat (limited to 'libpanto-go/panto.go')
| -rw-r--r-- | libpanto-go/panto.go | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/libpanto-go/panto.go b/libpanto-go/panto.go index 786ff1c..5644b61 100644 --- a/libpanto-go/panto.go +++ b/libpanto-go/panto.go @@ -202,7 +202,12 @@ type ( ) type ( - Agent struct{ ptr *C.PantoAgent } + Agent struct { + ptr *C.PantoAgent + retainedSession *Session + retainedConv *Conversation + retainedStoreCloser func() + } Stream struct { ptr *C.PantoStream err error @@ -564,16 +569,7 @@ func (b ContentBlock) Snapshot() OwnedContentBlock { } func NewAgent(cfg Config) (*Agent, error) { - st, err := NewNullStore() - if err != nil { - return nil, err - } - sess, err := CreateSession(st) - st.Close() - if err != nil { - return nil, err - } - return NewAgentWithSession(cfg, sess, nil) + return NewAgentWithSession(cfg, nil, nil) } func NewAgentWithSession(cfg Config, session *Session, conv *Conversation) (*Agent, error) { @@ -582,6 +578,11 @@ func NewAgentWithSession(cfg Config, session *Session, conv *Conversation) (*Age return nil, err } defer strings.free() + var csession *C.PantoSession + if session != nil { + csession = session.ptr + runtime.SetFinalizer(session, nil) + } var cconv *C.PantoConversation if conv != nil { cconv = conv.ptr @@ -589,10 +590,10 @@ func NewAgentWithSession(cfg Config, session *Session, conv *Conversation) (*Age runtime.SetFinalizer(conv, nil) } var out *C.PantoAgent - if C.panto_agent_create(&ccfg, session.ptr, cconv, &out) != C.PANTO_OK { + if C.panto_agent_create(&ccfg, csession, cconv, &out) != C.PANTO_OK { return nil, lastError() } - a := &Agent{out} + a := &Agent{ptr: out, retainedSession: session, retainedConv: conv} runtime.SetFinalizer(a, (*Agent).Close) return a, nil } @@ -602,6 +603,20 @@ func (a *Agent) Close() { C.panto_agent_destroy(a.ptr) a.ptr = nil } + if a != nil { + if a.retainedSession != nil { + a.retainedSession.ptr = nil + a.retainedSession = nil + } + if a.retainedConv != nil { + a.retainedConv.ptr = nil + a.retainedConv = nil + } + if a.retainedStoreCloser != nil { + a.retainedStoreCloser() + a.retainedStoreCloser = nil + } + } } func (a *Agent) SessionID() string { return goSlice(C.panto_agent_session_id(a.ptr)) } func (a *Agent) Conversation() *Conversation { |
