aboutsummaryrefslogtreecommitdiffstats
path: root/lib/erl_interface/src/connect/send_exit.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2019-01-24 17:51:08 +0100
committerRickard Green <[email protected]>2019-01-24 17:51:08 +0100
commit1ff44ec786828c3eeb2114cfeb5dd47e1a7fae61 (patch)
treed4bcae227e9aa7e56edfe84c4c58b253510b2773 /lib/erl_interface/src/connect/send_exit.c
parenta4aeacd28e4e31d3d79b091afcdc528082be2865 (diff)
parenta4641c5b3469d2e3cb9b0937ed941748fbbf2036 (diff)
downloadotp-1ff44ec786828c3eeb2114cfeb5dd47e1a7fae61.tar.gz
otp-1ff44ec786828c3eeb2114cfeb5dd47e1a7fae61.tar.bz2
otp-1ff44ec786828c3eeb2114cfeb5dd47e1a7fae61.zip
Merge branch 'rickard/ei-ext-maint/OTP-15442' into maint
* rickard/ei-ext-maint/OTP-15442: 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.c25
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;
}