bf1efb2099
- Migration 007: repo_url on apps table + analysis table with FTS5 - Analysis struct, parser, CRUD, validation, hash computation - Selective purge: remote-only apps/analysis preserved across fn index - CLI: fn app list/clone/pull, fn analysis list/clone/pull - search/show/list now include analysis results - Apps removed from git tracking (content lives in Gitea repos) - .gitkeep for apps/ and analysis/ dirs - Bash functions: jupyter analysis pipeline, shell utilities - Browser domain: CDP functions moved from infra to browser Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
818 B
Go
38 lines
818 B
Go
package browser
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
// CdpClose cierra la conexion WebSocket CDP y, si pid > 0, mata el proceso Chrome.
|
|
// Siempre intenta cerrar la conexion aunque el kill falle, y viceversa.
|
|
// Retorna el primer error encontrado.
|
|
func CdpClose(c *CDPConn, pid int) error {
|
|
var firstErr error
|
|
|
|
if c != nil && !c.closed {
|
|
c.closed = true
|
|
if err := c.conn.Close(); err != nil {
|
|
firstErr = fmt.Errorf("cdp close: cerrar websocket: %w", err)
|
|
}
|
|
}
|
|
|
|
if pid > 0 {
|
|
proc, err := os.FindProcess(pid)
|
|
if err != nil {
|
|
if firstErr == nil {
|
|
firstErr = fmt.Errorf("cdp close: encontrar proceso %d: %w", pid, err)
|
|
}
|
|
} else {
|
|
if err := proc.Kill(); err != nil {
|
|
if firstErr == nil {
|
|
firstErr = fmt.Errorf("cdp close: matar proceso %d: %w", pid, err)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return firstErr
|
|
}
|