+ * Important note: Because
+ * writing into the pipe is
+ * non-blocking (and therefore
+ * we allow dropping wakeup
+ * data, as long as there is
+ * wakeup data present in the
+ * pipe buffer to wake up the
+ * consumer), the consumer
+ * should perform the following
+ * sequence for waiting:
+ * 1) empty the pipe (reads).
+ * 2) check if there is data in
+ * the buffer.
+ * 3) wait on the pipe (poll).
+ *
+ * Discard the SIGPIPE from write(), not
+ * disturbing any SIGPIPE that might be
+ * already pending. If a bogus SIGPIPE
+ * is sent to the entire process
+ * concurrently by a malicious user, it
+ * may be simply discarded.
+ */
+ ret = sigemptyset(&pending_set);
+ assert(!ret);
+ /*
+ * sigpending returns the mask
+ * of signals that are _both_
+ * blocked for the thread _and_
+ * pending for either the thread
+ * or the entire process.