CRIU handles the rseq differently depending on the particular case. Let's classify and cover all of them.
+
CRIU handles restartable sequences differently depending on the execution state of the process at checkpoint time. This can be categorized into the following cases:
−
# the process is not inside the rseq critical section
+
# Process is not executing inside an rseq critical section
−
# the process is inside the rseq CS
+
# Process is executing inside an rseq critical section
−
## <code>flags</code> is <code>0</code> or <code>RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT</code> or <code>RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE</code>
+
## <code>flags</code> is <code>0</code>, <code>RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT</code>, or <code>RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE</code>
−
## <code>flags</code> is <code>RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL</code>
+
## <code>flags</code> includes <code>RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL</code>
=== the process is not inside the rseq critical section ===
=== the process is not inside the rseq critical section ===