-
- sit->bufsize = 32 * 1024;
- if (sit->btrn) {
- sit->task.pre_select = stdin_pre_select_btr;
- sit->task.post_select = stdin_post_select_btr;
- } else {
- sit->task.pre_select = stdin_pre_select;
- sit->task.post_select = stdin_post_select;
+ struct task_info ti = {
+ .name = "stdin",
+ .pre_select = stdin_pre_select,
+ .post_select = stdin_post_select,
+ .context = sit,
+ };
+
+ sit->btrp = btr_pool_new("stdin", 128 * 1024);
+ /*
+ * Both STDIN_FILENO and STDOUT_FILENO may refer to the same open file
+ * description (the terminal), and thus share the same file status
+ * flags. In order to not interfere with the stdout task, we only get
+ * the file status flags for STDIN here and save a copy. The nonblock
+ * flag is set later on the first read.
+ */
+ ret = fcntl(STDIN_FILENO, F_GETFL);
+ if (ret < 0) {
+ PARA_EMERG_LOG("F_GETFL: %s\n", strerror(errno));
+ exit(EXIT_FAILURE);