aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/sys/unix
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2016-07-07 11:33:32 +0200
committerSverker Eriksson <[email protected]>2016-07-07 11:33:32 +0200
commit9026aeebb86396e850a8f6347d1a81f9e2db5918 (patch)
treee7949a78b6086d41eda84b53f8833ff003092252 /erts/emulator/sys/unix
parentca4000874a198b218fd62b90e842475d2a0bb8c7 (diff)
parenta9ad9336a33ffbe0979a8e8e34bd69d0d87ede84 (diff)
downloadotp-9026aeebb86396e850a8f6347d1a81f9e2db5918.tar.gz
otp-9026aeebb86396e850a8f6347d1a81f9e2db5918.tar.bz2
otp-9026aeebb86396e850a8f6347d1a81f9e2db5918.zip
Merge branch 'sverker/spawn-driver-env-test' into maint
Diffstat (limited to 'erts/emulator/sys/unix')
-rw-r--r--erts/emulator/sys/unix/sys_drivers.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/erts/emulator/sys/unix/sys_drivers.c b/erts/emulator/sys/unix/sys_drivers.c
index 812112fb91..3d7be020e1 100644
--- a/erts/emulator/sys/unix/sys_drivers.c
+++ b/erts/emulator/sys/unix/sys_drivers.c
@@ -688,6 +688,10 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
return ERL_DRV_ERROR_ERRNO;
}
+ /*
+ * Whitebox test port_SUITE:pipe_limit_env
+ * assumes this command payload format.
+ */
io_vector[i].iov_base = (void*)&buffsz;
io_vector[i++].iov_len = sizeof(buffsz);
@@ -765,9 +769,14 @@ static ErlDrvData spawn_start(ErlDrvPort port_num, char* name,
if (res < (buffsz + sizeof(buffsz))) {
/* we only wrote part of the command payload. Enqueue the rest. */
for (i = 0; i < iov_len; i++) {
- driver_enq(port_num, io_vector[i].iov_base, io_vector[i].iov_len);
+ if (res >= io_vector[i].iov_len)
+ res -= io_vector[i].iov_len;
+ else {
+ driver_enq(port_num, io_vector[i].iov_base + res,
+ io_vector[i].iov_len - res);
+ res = 0;
+ }
}
- driver_deq(port_num, res);
driver_select(port_num, ofd[1], ERL_DRV_WRITE|ERL_DRV_USE, 1);
}