[BACK]Return to session.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/session.c between version 1.186 and 1.187

version 1.186, 2005/07/25 11:59:40 version 1.187, 2005/10/10 10:23:08
Line 1792 
Line 1792 
 session_exit_message(Session *s, int status)  session_exit_message(Session *s, int status)
 {  {
         Channel *c;          Channel *c;
         u_int i;  
   
         if ((c = channel_lookup(s->chanid)) == NULL)          if ((c = channel_lookup(s->chanid)) == NULL)
                 fatal("session_exit_message: session %d: no channel %d",                  fatal("session_exit_message: session %d: no channel %d",
Line 1818 
Line 1817 
   
         /* disconnect channel */          /* disconnect channel */
         debug("session_exit_message: release channel %d", s->chanid);          debug("session_exit_message: release channel %d", s->chanid);
         channel_cancel_cleanup(s->chanid);          s->pid = 0;
   
         /*          /*
            * Adjust cleanup callback attachment to send close messages when
            * the channel gets EOF. The session will be then be closed
            * by session_close_by_channel when the childs close their fds.
            */
           channel_register_cleanup(c->self, session_close_by_channel, 1);
   
           /*
          * emulate a write failure with 'chan_write_failed', nobody will be           * emulate a write failure with 'chan_write_failed', nobody will be
          * interested in data we write.           * interested in data we write.
          * Note that we must not call 'chan_read_failed', since there could           * Note that we must not call 'chan_read_failed', since there could
Line 1827 
Line 1834 
          */           */
         if (c->ostate != CHAN_OUTPUT_CLOSED)          if (c->ostate != CHAN_OUTPUT_CLOSED)
                 chan_write_failed(c);                  chan_write_failed(c);
         s->chanid = -1;  
   
         /* Close any X11 listeners associated with this session */  
         if (s->x11_chanids != NULL) {  
                 for (i = 0; s->x11_chanids[i] != -1; i++) {  
                         session_close_x11(s->x11_chanids[i]);  
                         s->x11_chanids[i] = -1;  
                 }  
         }  
 }  }
   
 void  void
Line 1879 
Line 1877 
         }          }
         if (s->chanid != -1)          if (s->chanid != -1)
                 session_exit_message(s, status);                  session_exit_message(s, status);
         session_close(s);          if (s->ttyfd != -1)
                   session_pty_cleanup(s);
 }  }
   
 /*  /*
Line 1890 
Line 1889 
 session_close_by_channel(int id, void *arg)  session_close_by_channel(int id, void *arg)
 {  {
         Session *s = session_by_channel(id);          Session *s = session_by_channel(id);
           u_int i;
   
         if (s == NULL) {          if (s == NULL) {
                 debug("session_close_by_channel: no session for id %d", id);                  debug("session_close_by_channel: no session for id %d", id);
Line 1909 
Line 1909 
         }          }
         /* detach by removing callback */          /* detach by removing callback */
         channel_cancel_cleanup(s->chanid);          channel_cancel_cleanup(s->chanid);
   
           /* Close any X11 listeners associated with this session */
           if (s->x11_chanids != NULL) {
                   for (i = 0; s->x11_chanids[i] != -1; i++) {
                           session_close_x11(s->x11_chanids[i]);
                           s->x11_chanids[i] = -1;
                   }
           }
   
         s->chanid = -1;          s->chanid = -1;
         session_close(s);          session_close(s);
 }  }
Line 1994 
Line 2003 
         }          }
         for (i = 0; s->x11_chanids[i] != -1; i++) {          for (i = 0; s->x11_chanids[i] != -1; i++) {
                 channel_register_cleanup(s->x11_chanids[i],                  channel_register_cleanup(s->x11_chanids[i],
                     session_close_single_x11);                      session_close_single_x11, 0);
         }          }
   
         /* Set up a suitable value for the DISPLAY variable. */          /* Set up a suitable value for the DISPLAY variable. */

Legend:
Removed from v.1.186  
changed lines
  Added in v.1.187