diff options
author | Rickard Green <[email protected]> | 2018-12-07 15:49:55 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2019-01-23 15:52:01 +0100 |
commit | eaeec753c035c2214be2930290a0a6de411566b0 (patch) | |
tree | 9547f5654ea07f787cab3f90e25124bbc1b4bb12 /lib/erl_interface/src/connect/send_exit.c | |
parent | f0ea49125815ec9197ffb6c74e20ebb5f10732d4 (diff) | |
download | otp-eaeec753c035c2214be2930290a0a6de411566b0.tar.gz otp-eaeec753c035c2214be2930290a0a6de411566b0.tar.bz2 otp-eaeec753c035c2214be2930290a0a6de411566b0.zip |
Pluggable distribution socket implementation for EI
Diffstat (limited to 'lib/erl_interface/src/connect/send_exit.c')
-rw-r--r-- | lib/erl_interface/src/connect/send_exit.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/lib/erl_interface/src/connect/send_exit.c b/lib/erl_interface/src/connect/send_exit.c index 2e298e3221..b4f7e14c7f 100644 --- a/lib/erl_interface/src/connect/send_exit.c +++ b/lib/erl_interface/src/connect/send_exit.c @@ -55,6 +55,17 @@ int ei_send_exit_tmo(int fd, const erlang_pid *from, const erlang_pid *to, char *s; int index = 0; int len = strlen(reason) + 1080; /* see below */ + ei_socket_callbacks *cbs; + void *ctx; + int err; + ssize_t wlen; + unsigned tmo = ms == 0 ? EI_SCLBK_INF_TMO : ms; + + err = EI_GET_CBS_CTX__(&cbs, &ctx, fd); + if (err) { + EI_CONN_SAVE_ERRNO__(err); + return ERL_ERROR; + } if (len > EISMALLBUF) if (!(dbuf = malloc(len))) @@ -92,10 +103,16 @@ int ei_send_exit_tmo(int fd, const erlang_pid *from, const erlang_pid *to, if (ei_tracelevel >= 4) ei_show_sendmsg(stderr,msgbuf,NULL); - ei_write_fill_t(fd,msgbuf,index,ms); - /* FIXME ignore timeout etc? erl_errno?! */ - - if (dbuf) free(dbuf); + wlen = (ssize_t) index; + err = ei_write_fill_ctx_t__(cbs, ctx, msgbuf, &wlen, tmo); + if (!err && wlen != (ssize_t) index) + err = EIO; + if (dbuf) + free(dbuf); + if (err) { + EI_CONN_SAVE_ERRNO__(err); + return ERL_ERROR; + } return 0; } |