aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Nord <[email protected]>2011-04-28 14:20:15 +0200
committerHenrik Nord <[email protected]>2011-04-28 14:20:22 +0200
commitad782e7f082aa25593346268be5b19b35db2a5ec (patch)
tree01a5056f26b462a9519b9d37ff2a5ba127377ddc
parentaacbae9180c757f7034b2840d4d2091a8ef3ea4a (diff)
parentb9e8506d802d7548e5573af5d38513a44ea7f8bd (diff)
downloadotp-ad782e7f082aa25593346268be5b19b35db2a5ec.tar.gz
otp-ad782e7f082aa25593346268be5b19b35db2a5ec.tar.bz2
otp-ad782e7f082aa25593346268be5b19b35db2a5ec.zip
Merge branch 'ms/file-fix-hang-reading-compressed-files' into dev
* ms/file-fix-hang-reading-compressed-files: file: fix hang reading compressed files OTP-9245
-rw-r--r--erts/emulator/drivers/common/gzio.c2
-rw-r--r--lib/kernel/test/file_SUITE.erl4
2 files changed, 6 insertions, 0 deletions
diff --git a/erts/emulator/drivers/common/gzio.c b/erts/emulator/drivers/common/gzio.c
index 5531a275ea..741cb6ae20 100644
--- a/erts/emulator/drivers/common/gzio.c
+++ b/erts/emulator/drivers/common/gzio.c
@@ -632,6 +632,7 @@ erts_gzseek(gzFile file, int offset, int whence)
while (s->position < pos) {
char buf[512];
int n;
+ int save_pos = s->position;
n = pos - s->position;
if (n > sizeof(buf))
@@ -643,6 +644,7 @@ erts_gzseek(gzFile file, int offset, int whence)
memset(buf, '\0', n);
erts_gzwrite(file, buf, n);
}
+ if (save_pos == s->position) break;
}
return s->position;
diff --git a/lib/kernel/test/file_SUITE.erl b/lib/kernel/test/file_SUITE.erl
index 8078c7d021..2f73394c4e 100644
--- a/lib/kernel/test/file_SUITE.erl
+++ b/lib/kernel/test/file_SUITE.erl
@@ -2055,6 +2055,10 @@ try_read_file_list(Fd) ->
?line Title = "Real Programmers Don't Use PASCAL</TITLE>\n",
?line Title = io:get_line(Fd, ''),
+ %% Seek past the end of the file.
+
+ ?line {ok, _} = ?FILE_MODULE:position(Fd, 25000),
+
%% Done.
?line ?FILE_MODULE:close(Fd),