1
0
forked from aniani/vim

patch 7.4.1315

Problem:    Using a channel handle does not allow for freeing it when unused.
Solution:   Add the Channel variable type.
This commit is contained in:
Bram Moolenaar
2016-02-13 23:23:53 +01:00
parent e516c39ee9
commit 7707344dde
14 changed files with 713 additions and 568 deletions

View File

@@ -1127,7 +1127,8 @@ typedef enum
VAR_DICT, /* "v_dict" is used */
VAR_FLOAT, /* "v_float" is used */
VAR_SPECIAL, /* "v_number" is used */
VAR_JOB /* "v_job" is used */
VAR_JOB, /* "v_job" is used */
VAR_CHANNEL /* "v_channel" is used */
} vartype_T;
/*
@@ -1148,6 +1149,9 @@ typedef struct
dict_T *v_dict; /* dict value (can be NULL!) */
#ifdef FEAT_JOB
job_T *v_job; /* job value (can be NULL!) */
#endif
#ifdef FEAT_CHANNEL
channel_T *v_channel; /* channel value (can be NULL!) */
#endif
} vval;
} typval_T;
@@ -1260,7 +1264,7 @@ struct jobvar_S
jobstatus_T jv_status;
int jv_refcount; /* reference count */
int jv_channel; /* channel for I/O */
channel_T *jv_channel; /* channel for I/O, reference counted */
};
/*
@@ -1268,35 +1272,41 @@ struct jobvar_S
*/
struct readq_S
{
char_u *buffer;
readq_T *next;
readq_T *prev;
char_u *rq_buffer;
readq_T *rq_next;
readq_T *rq_prev;
};
struct jsonq_S
{
typval_T *value;
jsonq_T *next;
jsonq_T *prev;
typval_T *jq_value;
jsonq_T *jq_next;
jsonq_T *jq_prev;
};
struct cbq_S
{
char_u *callback;
int seq_nr;
cbq_T *next;
cbq_T *prev;
char_u *cq_callback;
int cq_seq_nr;
cbq_T *cq_next;
cbq_T *cq_prev;
};
/* mode for a channel */
typedef enum
{
MODE_RAW = 0,
MODE_NL = 0,
MODE_RAW,
MODE_JSON,
MODE_JS
} ch_mode_T;
struct channel_S {
channel_T *ch_next;
channel_T *ch_prev;
int ch_id; /* ID of the channel */
sock_T ch_sock; /* the socket, -1 for a closed channel */
#ifdef UNIX
@@ -1342,7 +1352,11 @@ struct channel_S {
int ch_timeout; /* request timeout in msec */
job_T *ch_job; /* job that uses this channel */
job_T *ch_job; /* Job that uses this channel; this does not
* count as a reference to avoid a circular
* reference. */
int ch_refcount; /* reference count */
};