dont sink reference on pads from iterators

This commit is contained in:
Avi Zimmerman
2021-01-20 16:15:45 +02:00
parent dad32ff7cf
commit b39aac28ee
2 changed files with 7 additions and 3 deletions

View File

@@ -84,8 +84,6 @@ func (m *minioSrc) GetSize(self *base.GstBaseSrc) (bool, int64) {
} }
func (m *minioSrc) Start(self *base.GstBaseSrc) bool { func (m *minioSrc) Start(self *base.GstBaseSrc) bool {
m.state.mux.Lock()
defer m.state.mux.Unlock()
if m.state.started { if m.state.started {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, "MinIOSrc is already started", "") self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, "MinIOSrc is already started", "")
@@ -102,6 +100,8 @@ func (m *minioSrc) Start(self *base.GstBaseSrc) bool {
return false return false
} }
m.state.mux.Lock()
if strings.HasPrefix(m.settings.accessKeyID, "env:") { if strings.HasPrefix(m.settings.accessKeyID, "env:") {
spl := strings.Split(m.settings.accessKeyID, "env:") spl := strings.Split(m.settings.accessKeyID, "env:")
m.settings.accessKeyID = os.Getenv(spl[len(spl)-1]) m.settings.accessKeyID = os.Getenv(spl[len(spl)-1])
@@ -116,6 +116,7 @@ func (m *minioSrc) Start(self *base.GstBaseSrc) bool {
if err != nil { if err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed, self.ErrorMessage(gst.DomainResource, gst.ResourceErrorFailed,
fmt.Sprintf("Failed to connect to MinIO endpoint %s", m.settings.endpoint), err.Error()) fmt.Sprintf("Failed to connect to MinIO endpoint %s", m.settings.endpoint), err.Error())
m.state.mux.Unlock()
return false return false
} }
@@ -124,6 +125,7 @@ func (m *minioSrc) Start(self *base.GstBaseSrc) bool {
if err != nil { if err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorOpenRead, self.ErrorMessage(gst.DomainResource, gst.ResourceErrorOpenRead,
fmt.Sprintf("Failed to retrieve object %q from bucket %q", m.settings.key, m.settings.bucket), err.Error()) fmt.Sprintf("Failed to retrieve object %q from bucket %q", m.settings.key, m.settings.bucket), err.Error())
m.state.mux.Unlock()
return false return false
} }
@@ -132,11 +134,13 @@ func (m *minioSrc) Start(self *base.GstBaseSrc) bool {
if err != nil { if err != nil {
self.ErrorMessage(gst.DomainResource, gst.ResourceErrorOpenRead, self.ErrorMessage(gst.DomainResource, gst.ResourceErrorOpenRead,
fmt.Sprintf("Failed to stat object %q in bucket %q: %s", m.settings.key, m.settings.bucket, err.Error()), "") fmt.Sprintf("Failed to stat object %q in bucket %q: %s", m.settings.key, m.settings.bucket, err.Error()), "")
m.state.mux.Unlock()
return false return false
} }
self.Log(srcCAT, gst.LevelInfo, fmt.Sprintf("%+v", m.state.objInfo)) self.Log(srcCAT, gst.LevelInfo, fmt.Sprintf("%+v", m.state.objInfo))
m.state.started = true m.state.started = true
m.state.mux.Unlock()
self.StartComplete(gst.FlowOK) self.StartComplete(gst.FlowOK)

View File

@@ -1133,7 +1133,7 @@ func iteratorToPadSlice(iterator *C.GstIterator) ([]*Pad, error) {
case C.GST_ITERATOR_OK: case C.GST_ITERATOR_OK:
cPadVoid := C.g_value_get_object((*C.GValue)(gval)) cPadVoid := C.g_value_get_object((*C.GValue)(gval))
cPad := (*C.GstPad)(cPadVoid) cPad := (*C.GstPad)(cPadVoid)
pads = append(pads, FromGstPadUnsafeFull(unsafe.Pointer(cPad))) pads = append(pads, wrapPad(toGObject(unsafe.Pointer(cPad))))
C.g_value_reset((*C.GValue)(gval)) C.g_value_reset((*C.GValue)(gval))
default: default:
return nil, errors.New("Pad iterator failed") return nil, errors.New("Pad iterator failed")