[Tarantool-patches] [PATCH 09/12] popen: clarify popen_{signal, delete} contract

Alexander Turenko alexander.turenko at tarantool.org
Tue Apr 14 14:38:18 MSK 2020


It is convenient to have a formal description of an API during
development and when writing a documentation. I plan to use those
contracts when I will write an API description for the future popen Lua
module.

Part of #4031
---
 src/lib/core/popen.c | 30 ++++++++++++++++++++++++++----
 1 file changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/lib/core/popen.c b/src/lib/core/popen.c
index 1733e5131..411aad03b 100644
--- a/src/lib/core/popen.c
+++ b/src/lib/core/popen.c
@@ -360,7 +360,7 @@ popen_write_timeout(struct popen_handle *handle, const void *buf,
  *
  * - IllegalParams: a parameter check fails:
  *   - count: buffer is too big.
- *   - flags: POPEN_FLAG_FD_STD{OUT,ERR} are unset both.
+ *   - flags: POPEN_FLAG_FD_STD{OUT,ERR} are set or unset both.
  *   - handle: handle does not support the requested IO operation.
  * - SocketError: an IO error occurs at read().
  * - TimedOut: @a timeout quota is exceeded.
@@ -536,8 +536,18 @@ popen_state_str(unsigned int state)
 /**
  * Send a signal to a child process.
  *
+ * When POPEN_FLAG_GROUP_SIGNAL is set the function sends
+ * a signal to a process group rather than a process.
+ *
  * Return 0 at success or -1 at failure (and set a diag).
  *
+ * Possible errors:
+ *
+ * - SystemError: a process does not exists anymore
+ * - SystemError: invalid signal number
+ * - SystemError: no permission to send a signal to
+ *                a process or a process group
+ *
  * Set errno to ESRCH when a process does not exist.
  */
 int
@@ -578,9 +588,21 @@ popen_send_signal(struct popen_handle *handle, int signo)
 /**
  * Delete a popen handle.
  *
- * The function kills a child process and
- * close all fds and remove the handle from
- * a living list and finally frees the handle.
+ * The function performs the following actions:
+ *
+ * - Kill a child process or a process group depending of
+ *   POPEN_FLAG_GROUP_SIGNAL (if the process is alive and
+ *   POPEN_FLAG_KEEP_CHILD flag is not set).
+ * - Close all fds occupied by the handle.
+ * - Remove the handle from a living list.
+ * - Free all occupied memory.
+ *
+ * Return 0 at success and -1 at failure (and set a diag).
+ *
+ * Possible errors:
+ *
+ * - SystemError: no permission to send a signal to
+ *                a process or a process group
  */
 int
 popen_delete(struct popen_handle *handle)
-- 
2.25.0



More information about the Tarantool-patches mailing list