1
Fork 0
mirror of https://github.com/jech/galene.git synced 2024-11-25 01:55:57 +01:00

Split reopen into close/open.

Only call close if there's already a writer, which avoids flushing
packets before the first call.
This commit is contained in:
Juliusz Chroboczek 2022-04-17 18:24:08 +02:00
parent 99055e5cae
commit e3c8645897

View file

@ -184,15 +184,10 @@ func (conn *diskConn) warn(message string) {
} }
// called locked // called locked
func (conn *diskConn) reopen(extension string) error { func (conn *diskConn) open(extension string) error {
for _, t := range conn.tracks { if conn.file != nil {
t.writeBuffered(true) return errors.New("already open")
if t.writer != nil {
t.writer.Close()
t.writer = nil
}
} }
conn.file = nil
file, err := openDiskFile(conn.directory, conn.username, extension) file, err := openDiskFile(conn.directory, conn.username, extension)
if err != nil { if err != nil {
@ -203,10 +198,8 @@ func (conn *diskConn) reopen(extension string) error {
return nil return nil
} }
func (conn *diskConn) Close() error { // called locked
conn.remote.DelLocal(conn) func (conn *diskConn) close() []*diskTrack {
conn.mu.Lock()
tracks := make([]*diskTrack, 0, len(conn.tracks)) tracks := make([]*diskTrack, 0, len(conn.tracks))
for _, t := range conn.tracks { for _, t := range conn.tracks {
t.writeBuffered(true) t.writeBuffered(true)
@ -216,6 +209,15 @@ func (conn *diskConn) Close() error {
} }
tracks = append(tracks, t) tracks = append(tracks, t)
} }
conn.file = nil
return tracks
}
func (conn *diskConn) Close() error {
conn.remote.DelLocal(conn)
conn.mu.Lock()
tracks := conn.close()
conn.mu.Unlock() conn.mu.Unlock()
for _, t := range tracks { for _, t := range tracks {
@ -557,9 +559,14 @@ func (t *diskTrack) writeBuffered(force bool) error {
// called locked // called locked
func (conn *diskConn) initWriter(width, height uint32) error { func (conn *diskConn) initWriter(width, height uint32) error {
if conn.file != nil && width == conn.width && height == conn.height { if conn.file != nil {
return nil if width == conn.width && height == conn.height {
return nil
} else {
conn.close()
}
} }
isWebm := true isWebm := true
var desc []mkvcore.TrackDescription var desc []mkvcore.TrackDescription
for i, t := range conn.tracks { for i, t := range conn.tracks {
@ -630,7 +637,7 @@ func (conn *diskConn) initWriter(width, height uint32) error {
header = &h header = &h
} }
err := conn.reopen(extension) err := conn.open(extension)
if err != nil { if err != nil {
return err return err
} }