Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'xs/src/libslic3r/Print.hpp')
-rw-r--r--xs/src/libslic3r/Print.hpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/xs/src/libslic3r/Print.hpp b/xs/src/libslic3r/Print.hpp
index d72c1fef5..106640c4d 100644
--- a/xs/src/libslic3r/Print.hpp
+++ b/xs/src/libslic3r/Print.hpp
@@ -88,6 +88,11 @@ public:
bool invalidate(StepType step, tbb::mutex &mtx, CancelationCallback &cancel) {
bool invalidated = m_state[step].load(std::memory_order_relaxed) != INVALID;
if (invalidated) {
+#if 0
+ if (mtx.state != mtx.HELD) {
+ printf("Not held!\n");
+ }
+#endif
mtx.unlock();
cancel();
mtx.lock();
@@ -283,18 +288,14 @@ private:
SupportLayerPtrs m_support_layers;
PrintState<PrintObjectStep, posCount> m_state;
- // Mutex used for synchronization of the worker thread with the UI thread:
- // The mutex will be used to guard the worker thread against entering a stage
- // while the data influencing the stage is modified.
- tbb::mutex m_mutex;
// TODO: call model_object->get_bounding_box() instead of accepting
// parameter
PrintObject(Print* print, ModelObject* model_object, const BoundingBoxf3 &modobj_bbox);
~PrintObject() {}
- void set_started(PrintObjectStep step) { m_state.set_started(step, m_mutex); }
- void set_done(PrintObjectStep step) { m_state.set_done(step, m_mutex); }
+ void set_started(PrintObjectStep step);
+ void set_done(PrintObjectStep step);
std::vector<ExPolygons> _slice_region(size_t region_id, const std::vector<float> &z, bool modifier);
};
@@ -446,8 +447,8 @@ public:
const PrintRegion* get_region(size_t idx) const { return m_regions[idx]; }
protected:
- void set_started(PrintStep step) { m_state.set_started(step, m_mutex); }
- void set_done(PrintStep step) { m_state.set_done(step, m_mutex); }
+ void set_started(PrintStep step) { m_state.set_started(step, m_mutex); throw_if_canceled(); }
+ void set_done(PrintStep step) { m_state.set_done(step, m_mutex); throw_if_canceled(); }
bool invalidate_step(PrintStep step);
bool invalidate_all_steps() { return m_state.invalidate_all(m_mutex, m_cancel_callback); }
@@ -473,7 +474,7 @@ private:
// Mutex used for synchronization of the worker thread with the UI thread:
// The mutex will be used to guard the worker thread against entering a stage
// while the data influencing the stage is modified.
- tbb::mutex m_mutex;
+ mutable tbb::mutex m_mutex;
// Has the calculation been canceled?
tbb::atomic<bool> m_canceled;