Skip to content

Commit 1f858fe

Browse files
Fix dropEvent bug (#828)
* Fix weakly referenced object no longer exists Co-authored-by: Mohammed Ghannam <ghannam@zib.de> * Update CHANGELOG --------- Co-authored-by: Mohammed Ghannam <ghannam@zib.de>
1 parent 9e16f75 commit 1f858fe

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- Add SCIP function SCIPgetTreesizeEstimation and wrapper getTreesizeEstimation
77
- Add recipes sub-package
88
### Fixed
9+
- Fixed "weakly-referenced object no longer exists" when calling dropEvent in test_customizedbenders
910
- Fixed incorrect writing/printing when user had a non-default locale
1011
### Changed
1112
### Removed

src/pyscipopt/scip.pxi

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4861,6 +4861,8 @@ cdef class Model:
48614861
_eventhdlr = SCIPfindEventhdlr(self._scip, n)
48624862
else:
48634863
raise Warning("event handler not found")
4864+
4865+
Py_INCREF(self)
48644866
PY_SCIP_CALL(SCIPcatchEvent(self._scip, eventtype, _eventhdlr, NULL, NULL))
48654867

48664868
def dropEvent(self, eventtype, Eventhdlr eventhdlr):
@@ -4871,6 +4873,8 @@ cdef class Model:
48714873
_eventhdlr = SCIPfindEventhdlr(self._scip, n)
48724874
else:
48734875
raise Warning("event handler not found")
4876+
4877+
Py_DECREF(self)
48744878
PY_SCIP_CALL(SCIPdropEvent(self._scip, eventtype, _eventhdlr, NULL, -1))
48754879

48764880
def catchVarEvent(self, Variable var, eventtype, Eventhdlr eventhdlr):

tests/test_event.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ def eventinit(self):
1010
calls.append('eventinit')
1111
self.model.catchEvent(self.event_type, self)
1212

13-
#def eventexit(self):
14-
# self.model.dropEvent(self.event_type, self)
13+
def eventexit(self):
14+
# PR #828 fixes an error here, but the underlying cause might not be solved (self.model being deleted before dropEvent is called)
15+
self.model.dropEvent(self.event_type, self)
1516

1617
def eventexec(self, event):
1718
assert str(event) == event.getName()

0 commit comments

Comments
 (0)