mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-12 15:03:45 +00:00
fix: sqlite memory leak
This commit is contained in:
parent
02b87d96e4
commit
3e8973d0c7
1 changed files with 17 additions and 14 deletions
|
|
@ -204,17 +204,16 @@ func (p *ContentStorage) Close() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ContentStorage) createTable() error {
|
func (p *ContentStorage) createTable() error {
|
||||||
stat, err := p.sqliteDB.Prepare(createSql)
|
stmt, err := p.sqliteDB.Prepare(createSql)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer func(stat *sql.Stmt) {
|
defer func(stat *sql.Stmt) {
|
||||||
err = stat.Close()
|
if err = stat.Close(); err != nil {
|
||||||
if err != nil {
|
|
||||||
p.log.Error("failed to close statement", "err", err)
|
p.log.Error("failed to close statement", "err", err)
|
||||||
}
|
}
|
||||||
}(stat)
|
}(stmt)
|
||||||
_, err = stat.Exec()
|
_, err = stmt.Exec()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -243,13 +242,7 @@ func (p *ContentStorage) initStmts() error {
|
||||||
// Size get database size, content size and similar
|
// Size get database size, content size and similar
|
||||||
func (p *ContentStorage) Size() (uint64, error) {
|
func (p *ContentStorage) Size() (uint64, error) {
|
||||||
sql := "SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size();"
|
sql := "SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size();"
|
||||||
stmt, err := p.sqliteDB.Prepare(sql)
|
return p.queryRowUint64(sql)
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
var res uint64
|
|
||||||
err = stmt.QueryRow().Scan(&res)
|
|
||||||
return res, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ContentStorage) UnusedSize() (uint64, error) {
|
func (p *ContentStorage) UnusedSize() (uint64, error) {
|
||||||
|
|
@ -281,12 +274,17 @@ func (p *ContentStorage) ContentSize() (uint64, error) {
|
||||||
return p.queryRowUint64(sql)
|
return p.queryRowUint64(sql)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ContentStorage) queryRowUint64(sql string) (uint64, error) {
|
func (p *ContentStorage) queryRowUint64(sqlStr string) (uint64, error) {
|
||||||
// sql := "SELECT SUM(length(value)) FROM kvstore"
|
// sql := "SELECT SUM(length(value)) FROM kvstore"
|
||||||
stmt, err := p.sqliteDB.Prepare(sql)
|
stmt, err := p.sqliteDB.Prepare(sqlStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
defer func(stat *sql.Stmt) {
|
||||||
|
if err = stat.Close(); err != nil {
|
||||||
|
p.log.Error("failed to close statement", "err", err)
|
||||||
|
}
|
||||||
|
}(stmt)
|
||||||
var res uint64
|
var res uint64
|
||||||
err = stmt.QueryRow().Scan(&res)
|
err = stmt.QueryRow().Scan(&res)
|
||||||
return res, err
|
return res, err
|
||||||
|
|
@ -298,6 +296,11 @@ func (p *ContentStorage) GetLargestDistance() (*uint256.Int, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
defer func(stat *sql.Stmt) {
|
||||||
|
if err = stat.Close(); err != nil {
|
||||||
|
p.log.Error("failed to close statement", "err", err)
|
||||||
|
}
|
||||||
|
}(stmt)
|
||||||
var distance []byte
|
var distance []byte
|
||||||
|
|
||||||
err = stmt.QueryRow(p.nodeId[:]).Scan(&distance)
|
err = stmt.QueryRow(p.nodeId[:]).Scan(&distance)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue