[gridftp-commit] CVS update: MODIFIED: source, globus_gfork_server.c ...

John Bresnahan commit at globus.org
Thu Jun 21 16:29:34 CDT 2007


  User: bresnaha
  Date: 07/06/21 16:29:34

  Modified:    gfork/source Tag: gfork3 globus_gfork.h globus_gfork_lib.c
                        globus_gfork_server.c globus_i_gfork.h
  Log:
  
  
  Revision  Changes    Path
  No                   revision
  
  http://viewcvs.globus.org/viewcvs.cgi/gridftp/gfork/source/Tag:
  No                   revision
  
  http://viewcvs.globus.org/viewcvs.cgi/gridftp/gfork/source/gfork3
  1.2.4.5   +4 -0      gridftp/gfork/source/globus_gfork.h
  
  http://viewcvs.globus.org/viewcvs.cgi/gridftp/gfork/source/globus_gfork.h.diff?r1=1.2.4.4&r2=1.2.4.5
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_gfork.h
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/gridftp/gfork/source/globus_gfork.h,v
  retrieving revision 1.2.4.4
  retrieving revision 1.2.4.5
  diff -u -b -r1.2.4.4 -r1.2.4.5
  --- globus_gfork.h	12 Jun 2007 20:05:05 -0000	1.2.4.4
  +++ globus_gfork.h	21 Jun 2007 21:29:34 -0000	1.2.4.5
  @@ -12,6 +12,10 @@
   #define GlobusXIOGForkName(func) static const char * _gfork_func_name = #func
   #endif
   
  +#define GFORK_CHILD_READ_ENV "GFORK_CHILD_READ_ENV"
  +#define GFORK_CHILD_WRITE_ENV "GFORK_CHILD_WRITE_ENV"
  +#define GFORK_CHILD_CS_ENV "GFORK_CHILD_CS_ENV"
  +
   typedef void *                          gfork_child_handle_t;
   
   typedef enum
  
  
  
  1.2.4.9   +101 -44   gridftp/gfork/source/globus_gfork_lib.c
  
  http://viewcvs.globus.org/viewcvs.cgi/gridftp/gfork/source/globus_gfork_lib.c.diff?r1=1.2.4.8&r2=1.2.4.9
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_gfork_lib.c
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/gridftp/gfork/source/globus_gfork_lib.c,v
  retrieving revision 1.2.4.8
  retrieving revision 1.2.4.9
  diff -u -b -r1.2.4.8 -r1.2.4.9
  --- globus_gfork_lib.c	18 Jun 2007 20:51:20 -0000	1.2.4.8
  +++ globus_gfork_lib.c	21 Jun 2007 21:29:34 -0000	1.2.4.9
  @@ -10,22 +10,10 @@
   
   static globus_bool_t                    gfork_l_globals_set = GLOBUS_FALSE;
   
  -GlobusDebugDefine(GLOBUS_GFORK);
  +/* can only be 1 pipe per process, but we allow a list of callbacks */
  +static gfork_child_handle_t             gfork_l_handle;
   
  -typedef struct gfork_l_child_handle_s
  -{
  -    globus_xio_handle_t                 read_xio;
  -    globus_xio_handle_t                 write_xio;
  -    gfork_i_msg_header_t                header;
  -    globus_byte_t *                     data;
  -    globus_gfork_incoming_cb_t          incoming_cb;
  -    globus_gfork_open_func_t            open_cb;
  -    globus_gfork_closed_func_t          close_cb;
  -    globus_bool_t                       master;
  -    void *                              user_arg;
  -    globus_mutex_t                      mutex;
  -    gfork_i_state_t                     state;
  -} gfork_l_child_handle_t;
  +GlobusDebugDefine(GLOBUS_GFORK);
   
   static
   globus_result_t
  @@ -51,9 +39,9 @@
       globus_result_t                     result,
       void *                              user_arg)
   {
  -    gfork_l_child_handle_t *            handle;
  +    gfork_i_lib_handle_t *            handle;
   
  -    handle = (gfork_l_child_handle_t *) user_arg;
  +    handle = (gfork_i_lib_handle_t *) user_arg;
   
       handle->close_cb(handle, handle->user_arg, getpid());
   
  @@ -68,9 +56,9 @@
       globus_result_t                     result,
       void *                              user_arg)
   {
  -    gfork_l_child_handle_t *            handle;
  +    gfork_i_lib_handle_t *            handle;
   
  -    handle = (gfork_l_child_handle_t *) user_arg;
  +    handle = (gfork_i_lib_handle_t *) user_arg;
   
       result = globus_xio_register_close(
           handle->read_xio, NULL,
  @@ -85,7 +73,7 @@
   static
   void
   gfork_l_child_error(
  -    gfork_l_child_handle_t *            handle)
  +    gfork_i_lib_handle_t *            handle)
   {
       globus_result_t                     result;
   
  @@ -123,9 +111,9 @@
       globus_xio_data_descriptor_t        data_desc,
       void *                              user_arg)
   {
  -    gfork_l_child_handle_t *            handle;
  +    gfork_i_lib_handle_t *            handle;
   
  -    handle = (gfork_l_child_handle_t *) user_arg;
  +    handle = (gfork_i_lib_handle_t *) user_arg;
   
       if(result != GLOBUS_SUCCESS)
       {
  @@ -177,11 +165,11 @@
       globus_xio_data_descriptor_t        data_desc,
       void *                              user_arg)
   {
  -    gfork_l_child_handle_t *            handle;
  +    gfork_i_lib_handle_t *            handle;
       globus_bool_t                       call_close = GLOBUS_FALSE;
       globus_bool_t                       call_open = GLOBUS_FALSE;
   
  -    handle = (gfork_l_child_handle_t *) user_arg;
  +    handle = (gfork_i_lib_handle_t *) user_arg;
   
       globus_mutex_lock(&handle->mutex);
       {
  @@ -299,14 +287,14 @@
       globus_bool_t                       master)
   {
       globus_result_t                     result;
  -    gfork_l_child_handle_t *            handle;
  +    gfork_i_lib_handle_t *            handle;
       char *                              env;
       char *                              env_suffix;
       int                                 read_fd;
       int                                 write_fd;
   
  -    handle = (gfork_l_child_handle_t *)
  -        globus_calloc(1, sizeof(gfork_l_child_handle_t));
  +    handle = (gfork_i_lib_handle_t *)
  +        globus_calloc(1, sizeof(gfork_i_lib_handle_t));
   
       handle->state = GFORK_STATE_OPEN;
       handle->open_cb = open_cb;
  @@ -315,6 +303,7 @@
       handle->user_arg = user_arg;
       handle->master = master;
       globus_mutex_init(&handle->mutex, NULL);
  +    globus_fifo_init(&handle->write_q);
   
       if(in_env_suffix == NULL)
       {
  @@ -429,9 +418,9 @@
   globus_gfork_child_stop(
       gfork_child_handle_t                in_handle)
   {
  -    gfork_l_child_handle_t *            handle;
  +    gfork_i_lib_handle_t *            handle;
   
  -    handle = (gfork_l_child_handle_t *) in_handle;
  +    handle = (gfork_i_lib_handle_t *) in_handle;
       globus_mutex_lock(&handle->mutex);
       {
           gfork_l_child_error(handle);
  @@ -526,7 +515,7 @@
   static
   void
   gfork_l_client_writev_cb(
  -    globus_xio_handle_t                 handle,
  +    globus_xio_handle_t                 xio_handle,
       globus_result_t                     result,
       globus_xio_iovec_t *                iovec,
       int                                 count,
  @@ -535,8 +524,10 @@
       void *                              user_arg)
   {
       gfork_i_msg_t *                     msg;
  +    gfork_i_lib_handle_t *              handle;
   
       msg = (gfork_i_msg_t *) user_arg;
  +    handle = msg->lib_handle;
   
       /* lazy reuse of XIO callback.  perhaps we should define our own */
       if(msg->client_cb)
  @@ -544,15 +535,49 @@
           msg->client_cb(NULL, result, &msg->iov[1],
               count - 1, nbytes, data_desc, msg->user_arg);
       }
  -
       globus_free(msg->iov);
       globus_free(msg);
  +
  +    globus_mutex_lock(&handle->mutex);
  +    {
  +        if(result != GLOBUS_SUCCESS)
  +        {
  +            goto error;
  +        }
  +        if(!globus_fifo_empty(&handle->write_q))
  +        {
  +            msg = (gfork_i_msg_t *) globus_fifo_dequeue(&handle->write_q);
  +
  +            result = globus_xio_register_writev(
  +                handle->write_xio,
  +                msg->iov,
  +                msg->iovc,
  +                nbytes,
  +                NULL,
  +                gfork_l_client_writev_cb,
  +                msg);
  +            if(result != GLOBUS_SUCCESS)
  +            {
  +                goto error;
  +            }
  +        }
  +        else
  +        {
  +            handle->writing = GLOBUS_FALSE;
  +        }
  +    }
  +    globus_mutex_unlock(&handle->mutex);
  +
  +    return;
  +error:
  +
  +    globus_mutex_unlock(&handle->mutex);
   }
   
   
   globus_result_t
   globus_l_gfork_send(
  -    gfork_l_child_handle_t *            handle,
  +    gfork_i_lib_handle_t *            handle,
       uid_t                               pid,
       globus_xio_iovec_t *                iov,
       int                                 iovc,
  @@ -569,6 +594,7 @@
       msg->header.from_pid = getpid();
       msg->header.to_pid = pid;
       msg->header.type = GLOBUS_GFORK_MSG_DATA;
  +    msg->lib_handle = handle;
   
       msg->user_arg = user_arg;
   
  @@ -587,38 +613,69 @@
       msg->client_cb = cb;
       msg->header.size = nbytes;
   
  +    msg->iovc = iovc+1;
  +    if(!handle->writing)
  +    {
  +        handle->writing = GLOBUS_TRUE;
       result = globus_xio_register_writev(
           handle->write_xio,
           msg->iov,
  -        iovc+1,
  +            msg->iovc,
           nbytes,
           NULL,
           gfork_l_client_writev_cb,
           msg);
  +    }
  +    else
  +    {
  +        globus_fifo_enqueue(&handle->write_q, msg);
  +    }
       return result;
   }
   
   globus_result_t
   globus_gfork_broadcast(
  -    gfork_child_handle_t                handle,
  +    gfork_child_handle_t                in_handle,
       globus_xio_iovec_t *                iov,
       int                                 iovc,
       globus_xio_iovec_callback_t         cb,
       void *                              user_arg)
   {
  -    return globus_l_gfork_send(handle, -1, iov, iovc, cb, user_arg);
  +    globus_result_t                     result;
  +    gfork_i_lib_handle_t *              handle;
  +
  +    handle = (gfork_i_lib_handle_t *) in_handle;
  +
  +    globus_mutex_lock(&handle->mutex);
  +    {
  +        result = globus_l_gfork_send(handle, -1, iov, iovc, cb, user_arg);
  +    }
  +    globus_mutex_unlock(&handle->mutex);
  +
  +    return result;
   }
   
   globus_result_t
   globus_gfork_send(
  -    gfork_child_handle_t                handle,
  +    gfork_child_handle_t                in_handle,
       uid_t                               pid,
       globus_xio_iovec_t *                iov,
       int                                 iovc,
       globus_xio_iovec_callback_t         cb,
       void *                              user_arg)
   {
  -    return globus_l_gfork_send(handle, pid, iov, iovc, cb, user_arg);
  +    globus_result_t                     result;
  +    gfork_i_lib_handle_t *              handle;
  +
  +    handle = (gfork_i_lib_handle_t *) in_handle;
  +
  +    globus_mutex_lock(&handle->mutex);
  +    {
  +        result = globus_l_gfork_send(handle, pid, iov, iovc, cb, user_arg);
  +    }
  +    globus_mutex_unlock(&handle->mutex);
  +
  +    return result;
   }
   
   static
  
  
  
  1.2.4.11  +10 -12    gridftp/gfork/source/globus_gfork_server.c
  
  http://viewcvs.globus.org/viewcvs.cgi/gridftp/gfork/source/globus_gfork_server.c.diff?r1=1.2.4.10&r2=1.2.4.11
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_gfork_server.c
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/gridftp/gfork/source/globus_gfork_server.c,v
  retrieving revision 1.2.4.10
  retrieving revision 1.2.4.11
  diff -u -b -r1.2.4.10 -r1.2.4.11
  --- globus_gfork_server.c	19 Jun 2007 18:33:43 -0000	1.2.4.10
  +++ globus_gfork_server.c	21 Jun 2007 21:29:34 -0000	1.2.4.11
  @@ -28,6 +28,7 @@
   static gfork_i_child_handle_t *         gfork_l_master_child_handle = NULL;
   static gfork_i_options_t                gfork_l_options;
   static gfork_i_handle_t                 gfork_l_handle;
  +static char *                           g_contact_string;
   
   static
   void
  @@ -362,7 +363,7 @@
           globus_libc_setenv(GFORK_CHILD_READ_ENV, tmp_str, 1);
           sprintf(tmp_str, "%d", write_fd);
           globus_libc_setenv(GFORK_CHILD_WRITE_ENV, tmp_str, 1);
  -
  +        globus_libc_setenv(GFORK_CHILD_CS_ENV, g_contact_string, 1);
   
           gfork_log(2, "Master Child FDs %s %s\n",
               globus_libc_getenv(GFORK_CHILD_READ_ENV),
  @@ -807,25 +808,23 @@
   {
       gfork_i_options_t *                 gfork_h;
       globus_result_t                     res;
  -    char *                              contact_string;
   
       gfork_h = &gfork_l_options;
   
  -    /* start the master program */
  -    res = gfork_l_spawn_master(gfork_h);
  +    res = globus_xio_server_get_contact_string(
  +        gfork_l_handle.server_xio, &g_contact_string);
       if(res != GLOBUS_SUCCESS)
       {
  -        goto error_master;
  +        goto error_contact;
       }
  +    gfork_log(0, "Listening on: %s\n", g_contact_string);
   
  -    res = globus_xio_server_get_contact_string(
  -        gfork_l_handle.server_xio, &contact_string);
  +    /* start the master program */
  +    res = gfork_l_spawn_master(gfork_h);
       if(res != GLOBUS_SUCCESS)
       {
  -        goto error_contact;
  +        goto error_master;
       }
  -    gfork_log(0, "Listening on: %s\n", contact_string);
  -    globus_free(contact_string);
   
       res = globus_xio_server_register_accept(
           gfork_l_handle.server_xio,
  @@ -838,9 +837,8 @@
       return GLOBUS_SUCCESS;
   
   error_register:
  -    free(contact_string);
  -error_contact:
   error_master:
  +error_contact:
   
       return res;
   }
  
  
  
  1.2.4.9   +19 -3     gridftp/gfork/source/globus_i_gfork.h
  
  http://viewcvs.globus.org/viewcvs.cgi/gridftp/gfork/source/globus_i_gfork.h.diff?r1=1.2.4.8&r2=1.2.4.9
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: globus_i_gfork.h
  ===================================================================
  RCS file: /home/globdev/CVS/globus-packages/gridftp/gfork/source/globus_i_gfork.h,v
  retrieving revision 1.2.4.8
  retrieving revision 1.2.4.9
  diff -u -b -r1.2.4.8 -r1.2.4.9
  --- globus_i_gfork.h	19 Jun 2007 14:38:55 -0000	1.2.4.8
  +++ globus_i_gfork.h	21 Jun 2007 21:29:34 -0000	1.2.4.9
  @@ -28,9 +28,6 @@
               "System error in %s",                                           \
               _msg)
   
  -#define GFORK_CHILD_READ_ENV "GFORK_CHILD_READ_ENV"
  -#define GFORK_CHILD_WRITE_ENV "GFORK_CHILD_WRITE_ENV"
  -
   #define GForkErrorStr(_msg) \
       globus_error_put(GForkErrorObjStr(_msg))
   
  @@ -104,11 +101,13 @@
       struct gfork_i_child_handle_s *     from_kid;
       void *                              user_arg;
       globus_xio_iovec_t *                iov;
  +    int                                 iovc;
       globus_xio_iovec_t                  write_iov[2];
       globus_xio_iovec_callback_t         client_cb;
       globus_xio_iovec_callback_t         cb;
       gfork_i_msg_data_t *                data;
       globus_byte_t *                     buffer;
  +    struct gfork_i_lib_handle_s *       lib_handle;
   } gfork_i_msg_t;
   
   typedef enum gfork_i_state_e
  @@ -181,6 +180,23 @@
       globus_bool_t                       master;
   } gfork_i_child_handle_t;
   
  +typedef struct gfork_i_lib_handle_s
  +{
  +    globus_xio_handle_t                 read_xio;
  +    globus_xio_handle_t                 write_xio;
  +    gfork_i_msg_header_t                header;
  +    globus_byte_t *                     data;
  +    globus_gfork_incoming_cb_t          incoming_cb;
  +    globus_gfork_open_func_t            open_cb;
  +    globus_gfork_closed_func_t          close_cb;
  +    globus_bool_t                       master;
  +    void *                              user_arg;
  +    globus_mutex_t                      mutex;
  +    gfork_i_state_t                     state;
  +    globus_fifo_t                       write_q;
  +    globus_bool_t                       writing;
  +} gfork_i_lib_handle_t;
  +
   globus_result_t
   gfork_i_make_xio_handle(
       globus_xio_handle_t *               xio_handle,
  
  
  




More information about the gridftp-commit mailing list