You commit speculations by using the commit
function. When a speculative buffer is committed, its data is
copied into the principal buffer. If there is more data in the
specified speculative buffer than there is available space in the
principal buffer, no data is copied and the drop count for the
buffer is incremented. If the buffer has been speculatively traced
on more than one CPU, the speculative data on the committing CPU
is copied immediately, while speculative data on other CPUs is
copied some time after the commit
. Thus, some
time might elapse between a commit
that begins
on one CPU, while the data is being copied from speculative
buffers to principal buffers on all CPUs. This length of time is
guaranteed to be no longer than the time dictated by the cleaning
rate. See Section 7.8, “Speculation Options and Tuning”.
A committing speculative buffer is not made available to
subsequent speculation
calls until each per-CPU
speculative buffer has been completely copied into its
corresponding per-CPU principal buffer. Similarly, subsequent
calls to speculate
to the committing buffer are
silently discarded, and subsequent calls to
commit
or discard
silently
fail. Finally, a clause containing a commit
cannot contain a data recording action. However, a clause can
contain multiple commit
calls to commit
disjoint buffers.