mirror of
https://github.com/jech/galene.git
synced 2024-12-26 09:15:46 +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:
parent
99055e5cae
commit
e3c8645897
1 changed files with 22 additions and 15 deletions
|
@ -184,15 +184,10 @@ func (conn *diskConn) warn(message string) {
|
|||
}
|
||||
|
||||
// called locked
|
||||
func (conn *diskConn) reopen(extension string) error {
|
||||
for _, t := range conn.tracks {
|
||||
t.writeBuffered(true)
|
||||
if t.writer != nil {
|
||||
t.writer.Close()
|
||||
t.writer = nil
|
||||
}
|
||||
func (conn *diskConn) open(extension string) error {
|
||||
if conn.file != nil {
|
||||
return errors.New("already open")
|
||||
}
|
||||
conn.file = nil
|
||||
|
||||
file, err := openDiskFile(conn.directory, conn.username, extension)
|
||||
if err != nil {
|
||||
|
@ -203,10 +198,8 @@ func (conn *diskConn) reopen(extension string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (conn *diskConn) Close() error {
|
||||
conn.remote.DelLocal(conn)
|
||||
|
||||
conn.mu.Lock()
|
||||
// called locked
|
||||
func (conn *diskConn) close() []*diskTrack {
|
||||
tracks := make([]*diskTrack, 0, len(conn.tracks))
|
||||
for _, t := range conn.tracks {
|
||||
t.writeBuffered(true)
|
||||
|
@ -216,6 +209,15 @@ func (conn *diskConn) Close() error {
|
|||
}
|
||||
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()
|
||||
|
||||
for _, t := range tracks {
|
||||
|
@ -557,9 +559,14 @@ func (t *diskTrack) writeBuffered(force bool) error {
|
|||
|
||||
// called locked
|
||||
func (conn *diskConn) initWriter(width, height uint32) error {
|
||||
if conn.file != nil && width == conn.width && height == conn.height {
|
||||
return nil
|
||||
if conn.file != nil {
|
||||
if width == conn.width && height == conn.height {
|
||||
return nil
|
||||
} else {
|
||||
conn.close()
|
||||
}
|
||||
}
|
||||
|
||||
isWebm := true
|
||||
var desc []mkvcore.TrackDescription
|
||||
for i, t := range conn.tracks {
|
||||
|
@ -630,7 +637,7 @@ func (conn *diskConn) initWriter(width, height uint32) error {
|
|||
header = &h
|
||||
}
|
||||
|
||||
err := conn.reopen(extension)
|
||||
err := conn.open(extension)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue