diff options
author | Hans Bolinder <[email protected]> | 2011-09-01 13:07:38 +0200 |
---|---|---|
committer | Hans Bolinder <[email protected]> | 2011-09-01 13:07:38 +0200 |
commit | 12c84d2ec315c8d26afc2adb8aa50cfe6183fc8a (patch) | |
tree | 60b34bd8a8f9ae53feaa62ce28625d409a928ac5 /lib/kernel/src | |
parent | e813241e103aa74d4daf025564b259f3fb9aca5a (diff) | |
download | otp-12c84d2ec315c8d26afc2adb8aa50cfe6183fc8a.tar.gz otp-12c84d2ec315c8d26afc2adb8aa50cfe6183fc8a.tar.bz2 otp-12c84d2ec315c8d26afc2adb8aa50cfe6183fc8a.zip |
Fix two minor disk_log bugs
disk_log:reopen/2,3 and disk_log:breopen/3 could return
the error reason from file:rename/2 rather than the reason
{file_error, Filename, Reason}.
The message {disk_log, Node, {error, disk_log_stopped}} which
according the documentation is sent upon failure to truncate or reopen
a disk log was sometimes turned into a reply.
Diffstat (limited to 'lib/kernel/src')
-rw-r--r-- | lib/kernel/src/disk_log.erl | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/kernel/src/disk_log.erl b/lib/kernel/src/disk_log.erl index 9b8d2db437..d6bc23be6d 100644 --- a/lib/kernel/src/disk_log.erl +++ b/lib/kernel/src/disk_log.erl @@ -1240,20 +1240,29 @@ is_owner(Pid, L) -> %% ok | throw(Error) rename_file(File, NewFile, halt) -> - file:rename(File, NewFile); + case file:rename(File, NewFile) of + ok -> + ok; + Else -> + file_error(NewFile, Else) + end; rename_file(File, NewFile, wrap) -> rename_file(wrap_file_extensions(File), File, NewFile, ok). -rename_file([Ext|Exts], File, NewFile, Res) -> - NRes = case file:rename(add_ext(File, Ext), add_ext(NewFile, Ext)) of +rename_file([Ext|Exts], File, NewFile0, Res) -> + NewFile = add_ext(NewFile0, Ext), + NRes = case file:rename(add_ext(File, Ext), NewFile) of ok -> Res; Else -> - Else + file_error(NewFile, Else) end, - rename_file(Exts, File, NewFile, NRes); + rename_file(Exts, File, NewFile0, NRes); rename_file([], _File, _NewFiles, Res) -> Res. +file_error(FileName, {error, Error}) -> + {error, {file_error, FileName, Error}}. + %% "Old" error messages have been kept, arg_mismatch has been added. %%-spec compare_arg(dlog_options(), #arg{}, compare_arg([], _A, none, _OrigHead) -> @@ -1947,7 +1956,8 @@ monitor_request(Pid, Req) -> receive {'DOWN', Ref, process, Pid, _Info} -> {error, no_such_log}; - {disk_log, Pid, Reply} -> + {disk_log, Pid, Reply} when not is_tuple(Reply) orelse + element(2, Reply) =/= disk_log_stopped -> erlang:demonitor(Ref), receive {'DOWN', Ref, process, Pid, _Reason} -> |