Handling destruction of empty Net objects #5588

Merged
merged 1 commit into from May 4, 2017

Conversation

Projects
None yet
4 participants

ShaggO commented May 4, 2017

When constructing a network, the internal object initialization of Matlab actually creates a new network and replaces the already instantiated object, causing an empty network to be deleted. This PR checks if the caffe net pointer is defined before calling the net-deletion-function in caffe_.cpp.
Fixes #5346

ShaggO referenced this pull request May 4, 2017

Closed

matlab warning #5346

Owner

shelhamer commented May 4, 2017

Thanks for the fix!

@shelhamer shelhamer merged commit c293d9d into BVLC:master May 4, 2017

1 check passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details

ShaggO deleted the ShaggO:matlab-fix-delete branch May 23, 2017

This fix may still lead to error,I change the code to this, and everything gets all right:
if self.isvalid caffe_('delete_net', self.hNet_self); end

@meixiaofeng meixiaofeng added a commit to meixiaofeng/caffe that referenced this pull request May 24, 2017

@meixiaofeng meixiaofeng Check Caffe Net object is valid before delete
I run the matlab classification_demo on windows, and I get the following error:

Warning: The following error was caught while executing 'caffe.Net' class destructor:
Error using caffe_
Could not convert handle to pointer due to invalid init_key. The object might have been cleared.

Error in caffe.Net/delete (line 72)
          caffe_('delete_net', self.hNet_self);

Just like @ShaggO put it," When constructing a network, the internal object initialization of Matlab actually creates a new network and replaces the already instantiated object, causing an empty network to be deleted".But the method and change used in BVLC#5346 and PR #5588 does not work for me.Since the solver object may have already been deleted but we still reference it like this, 'self.hSolver_self '. We must check if the sovler object is still valid before deleting it.
cea9181

The similar issue that I have encountered as follow:
Error using caffe_
Usage: caffe_('delete_solver', hSolver)

Error in caffe.Solver/delete (line 40)
caffe_('delete_solver', self.hSolver_self);

The solution to this issue as the same to @meixiaofeng way. I change the code to as follow:
if self.isvalid
caffe_('delete_solver', self.hSolver_self);
end

Finally, thx to @meixiaofeng.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment