fix possibly goroutne leak

This commit is contained in:
Yasuhiro Matsumoto
2024-07-23 00:26:56 +09:00
parent 5baa1c304b
commit ca90567c98
3 changed files with 18 additions and 9 deletions

View File

@@ -19,7 +19,7 @@ func (b MySQLBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (ch
return nil, err return nil, err
} }
rows, err := b.DB.Query(query, params...) rows, err := b.DB.QueryContext(ctx, query, params...)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
close(ch) close(ch)
return nil, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return nil, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
@@ -37,7 +37,10 @@ func (b MySQLBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (ch
return return
} }
evt.CreatedAt = nostr.Timestamp(timestamp) evt.CreatedAt = nostr.Timestamp(timestamp)
ch <- &evt select {
case ch <- &evt:
case <-ctx.Done():
}
} }
}() }()
@@ -51,7 +54,7 @@ func (b MySQLBackend) CountEvents(ctx context.Context, filter nostr.Filter) (int
} }
var count int64 var count int64
if err = b.DB.QueryRow(query, params...).Scan(&count); err != nil && err != sql.ErrNoRows { if err = b.DB.QueryRowContext(ctx, query, params...).Scan(&count); err != nil && err != sql.ErrNoRows {
return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
} }
return count, nil return count, nil

View File

@@ -16,7 +16,7 @@ func (b PostgresBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (
return nil, err return nil, err
} }
rows, err := b.DB.Query(query, params...) rows, err := b.DB.QueryContext(ctx, query, params...)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return nil, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return nil, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
} }
@@ -34,7 +34,10 @@ func (b PostgresBackend) QueryEvents(ctx context.Context, filter nostr.Filter) (
return return
} }
evt.CreatedAt = nostr.Timestamp(timestamp) evt.CreatedAt = nostr.Timestamp(timestamp)
ch <- &evt select {
case ch <- &evt:
case <-ctx.Done():
}
} }
}() }()
@@ -48,7 +51,7 @@ func (b PostgresBackend) CountEvents(ctx context.Context, filter nostr.Filter) (
} }
var count int64 var count int64
if err = b.DB.QueryRow(query, params...).Scan(&count); err != nil && err != sql.ErrNoRows { if err = b.DB.QueryRowContext(ctx, query, params...).Scan(&count); err != nil && err != sql.ErrNoRows {
return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
} }
return count, nil return count, nil

View File

@@ -16,7 +16,7 @@ func (b SQLite3Backend) QueryEvents(ctx context.Context, filter nostr.Filter) (c
return nil, err return nil, err
} }
rows, err := b.DB.Query(query, params...) rows, err := b.DB.QueryContext(ctx, query, params...)
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return nil, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return nil, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
} }
@@ -34,7 +34,10 @@ func (b SQLite3Backend) QueryEvents(ctx context.Context, filter nostr.Filter) (c
return return
} }
evt.CreatedAt = nostr.Timestamp(timestamp) evt.CreatedAt = nostr.Timestamp(timestamp)
ch <- &evt select {
case ch <- &evt:
case <-ctx.Done():
}
} }
}() }()
@@ -48,7 +51,7 @@ func (b SQLite3Backend) CountEvents(ctx context.Context, filter nostr.Filter) (i
} }
var count int64 var count int64
if err = b.DB.QueryRow(query, params...).Scan(&count); err != nil && err != sql.ErrNoRows { if err = b.DB.QueryRowContext(ctx, query, params...).Scan(&count); err != nil && err != sql.ErrNoRows {
return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err) return 0, fmt.Errorf("failed to fetch events using query %q: %w", query, err)
} }
return count, nil return count, nil