// AsSource returns an interface for reading the resource.
func (res *memoryResource) AsSource() (buf serial.SeekingReadCloser, err error) {
	if res.writeLocks == 0 {
		res.readLocks++
		buf = serial.NewByteStoreFromData(res.data, func([]byte) { res.readLocks-- })
	} else {
		err = fmt.Errorf("Cannot open for reading")
	}

	return
}
// AsSink returns an interface for writing the resource.
func (res *memoryResource) AsSink() (buf serial.SeekingWriteCloser, err error) {
	if res.readLocks == 0 && res.writeLocks == 0 {
		res.writeLocks++
		buf = serial.NewByteStoreFromData(nil, func(data []byte) {
			res.data = data
			res.writeLocks--
		})
	} else {
		err = fmt.Errorf("Cannot open for writing")
	}

	return
}
func (library *ReleaseStoreLibrary) saveAndReloadObjpropData(data []byte, path string, name string) (provider objprop.Provider, reader serial.SeekingReadCloser) {
	newResource, err := library.saveResource(data, path, name)

	if err == nil {
		reader, err = newResource.AsSource()
	}
	if err == nil {
		provider, err = dosObjprop.NewProvider(reader, library.descriptors)
		if err != nil {
			reader.Close()
		}
	}
	if err != nil {
		log.Printf("Failed to store in sink, buffering: %v\n", err)
		reader = serial.NewByteStoreFromData(data, func([]byte) {})
		provider, _ = dosObjprop.NewProvider(reader, library.descriptors)
	}

	return
}