Sweep the monitor list.
Change-Id: I343261206f8bbabd245b404dd95d532255e5d870
diff --git a/src/mark_sweep.cc b/src/mark_sweep.cc
index 05f229d..79597ec 100644
--- a/src/mark_sweep.cc
+++ b/src/mark_sweep.cc
@@ -13,6 +13,7 @@
#include "logging.h"
#include "macros.h"
#include "mark_stack.h"
+#include "monitor.h"
#include "object.h"
#include "runtime.h"
#include "space.h"
@@ -125,24 +126,9 @@
}
}
-struct InternTableEntryIsUnmarked : public InternTable::Predicate {
- InternTableEntryIsUnmarked(MarkSweep* ms) : ms_(ms) { }
-
- bool operator()(const String* s) const {
- return !ms_->IsMarked(s);
- }
-
- MarkSweep* ms_;
-};
-
-void MarkSweep::SweepMonitorList() {
- UNIMPLEMENTED(WARNING);
- //dvmSweepMonitorList(&gDvm.monitorList, isUnmarkedObject);
-}
-
void MarkSweep::SweepSystemWeaks() {
- Runtime::Current()->GetInternTable()->RemoveWeakIf(InternTableEntryIsUnmarked(this));
- SweepMonitorList();
+ Runtime::Current()->GetInternTable()->SweepInternTableWeaks(IsMarked, this);
+ Runtime::Current()->GetMonitorList()->SweepMonitorList(IsMarked, this);
SweepJniWeakGlobals();
}