[BACK]Return to server-client.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tmux

Diff for /src/usr.bin/tmux/server-client.c between version 1.193 and 1.194

version 1.193, 2016/10/12 13:03:27 version 1.194, 2016/10/16 17:55:14
Line 126 
Line 126 
         c->fd = -1;          c->fd = -1;
         c->cwd = NULL;          c->cwd = NULL;
   
         c->cmdq = cmdq_new(c);          TAILQ_INIT(&c->queue);
         c->cmdq->client_exit = 1;  
   
         c->stdin_data = evbuffer_new();          c->stdin_data = evbuffer_new();
         c->stdout_data = evbuffer_new();          c->stdout_data = evbuffer_new();
Line 244 
Line 243 
         free(c->prompt_string);          free(c->prompt_string);
         free(c->prompt_buffer);          free(c->prompt_buffer);
   
         c->cmdq->flags |= CMD_Q_DEAD;  
         cmdq_free(c->cmdq);  
         c->cmdq = NULL;  
   
         environ_free(c->environ);          environ_free(c->environ);
   
         proc_remove_peer(c->peer);          proc_remove_peer(c->peer);
Line 281 
Line 276 
   
         log_debug("free client %p (%d references)", c, c->references);          log_debug("free client %p (%d references)", c, c->references);
   
           if (!TAILQ_EMPTY(&c->queue))
                   fatalx("queue not empty");
   
         if (c->references == 0)          if (c->references == 0)
                 free(c);                  free(c);
 }  }
Line 1254 
Line 1252 
         }          }
 }  }
   
   /* Callback when command is done. */
   static enum cmd_retval
   server_client_command_done(struct cmd_q *cmdq, __unused void *data)
   {
           struct client   *c = cmdq->client;
   
           if (~c->flags & CLIENT_ATTACHED)
                   c->flags |= CLIENT_EXIT;
           return (CMD_RETURN_NORMAL);
   }
   
   /* Show an error message. */
   static enum cmd_retval
   server_client_command_error(struct cmd_q *cmdq, void *data)
   {
           char    *error = data;
   
           cmdq_error(cmdq, "%s", error);
           free(error);
   
           return (CMD_RETURN_NORMAL);
   }
   
 /* Handle command message. */  /* Handle command message. */
 static void  static void
 server_client_dispatch_command(struct client *c, struct imsg *imsg)  server_client_dispatch_command(struct client *c, struct imsg *imsg)
Line 1276 
Line 1297 
   
         argc = data.argc;          argc = data.argc;
         if (cmd_unpack_argv(buf, len, argc, &argv) != 0) {          if (cmd_unpack_argv(buf, len, argc, &argv) != 0) {
                 cmdq_error(c->cmdq, "command too long");                  cause = xstrdup("command too long");
                 goto error;                  goto error;
         }          }
   
Line 1287 
Line 1308 
         }          }
   
         if ((cmdlist = cmd_list_parse(argc, argv, NULL, 0, &cause)) == NULL) {          if ((cmdlist = cmd_list_parse(argc, argv, NULL, 0, &cause)) == NULL) {
                 cmdq_error(c->cmdq, "%s", cause);  
                 cmd_free_argv(argc, argv);                  cmd_free_argv(argc, argv);
                 goto error;                  goto error;
         }          }
         cmd_free_argv(argc, argv);          cmd_free_argv(argc, argv);
   
         if (c != cfg_client || cfg_finished)          cmdq_append(c, cmdq_get_command(cmdlist, NULL, NULL, 0));
                 cmdq_run(c->cmdq, cmdlist, NULL);          cmdq_append(c, cmdq_get_callback(server_client_command_done, NULL));
         else  
                 cmdq_append(c->cmdq, cmdlist, NULL);  
         cmd_list_free(cmdlist);          cmd_list_free(cmdlist);
         return;          return;
   
 error:  error:
           cmdq_append(c, cmdq_get_callback(server_client_command_error, cause));
   
         if (cmdlist != NULL)          if (cmdlist != NULL)
                 cmd_list_free(cmdlist);                  cmd_list_free(cmdlist);
   

Legend:
Removed from v.1.193  
changed lines
  Added in v.1.194