[#70257] [Ruby trunk - Feature #11420] [Open] Introduce ID key table into MRI — ko1@...

Issue #11420 has been reported by Koichi Sasada.

11 messages 2015/08/06

[ruby-core:70455] [Ruby trunk - Bug #11462] win32 readlink doesn't support dedup

From: abudovski@...
Date: 2015-08-19 06:19:55 UTC
List: ruby-core #70455
Issue #11462 has been updated by Alex Budovski.


Command line

~~~
'.\miniruby.exe -I./lib -I.  ./tool/mkconfig.rb -timestamp=./.rbconfig.time  -arch=x64-mswin64_120 -version="2.3.0"  -install_name=ruby  -so_name=x64-msvcr120-ruby230_d rbconfig.rb'
~~~

----------------------------------------
Bug #11462: win32 readlink doesn't support dedup
https://bugs.ruby-lang.org/issues/11462#change-53863

* Author: Alex Budovski
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: latest master
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
During build:

./tool/mkconfig.rb:13:in `require': Invalid argument @ rb_readlink - E:/dev/ruby/lib/fileutils.rb (Errno::EINVAL)
        from ./tool/mkconfig.rb:13:in `<main>'
NMAKE : fatal error U1077: '.\miniruby.exe' : return code '0x1'
Stop.

This is due to:

~~~
 # Child-SP          RetAddr           Call Site
00 000000a8`1191d540 00007ff7`14929486 miniruby!rb_w32_wreadlink+0x209 [e:\dev\ruby\win32\win32.c @ 4743]
01 000000a8`1191dde0 00007ff7`1476c941 miniruby!rb_readlink+0x196 [e:\dev\ruby\win32\file.c @ 681]
02 000000a8`1191e080 00007ff7`14767400 miniruby!realpath_rec+0x7a1 [e:\dev\ruby\file.c @ 3791]
03 000000a8`1191e230 00007ff7`1475da4a miniruby!rb_realpath_internal+0x5b0 [e:\dev\ruby\file.c @ 3895]
04 000000a8`1191e320 00007ff7`1475dbfb miniruby!rb_load_internal0+0x1ba [e:\dev\ruby\load.c @ 610]
05 000000a8`1191e4f0 00007ff7`1475bdff miniruby!rb_load_internal+0x2b [e:\dev\ruby\load.c @ 646]
06 000000a8`1191e530 00007ff7`1475b99b miniruby!rb_require_internal+0x22f [e:\dev\ruby\load.c @ 1016]
07 000000a8`1191e700 00007ff7`1475b96f miniruby!rb_require_safe+0x1b [e:\dev\ruby\load.c @ 1062]
08 000000a8`1191e740 00007ff7`148e2053 miniruby!rb_f_require+0x1f [e:\dev\ruby\load.c @ 830]
09 000000a8`1191e770 00007ff7`148e32eb miniruby!call_cfunc_1+0x33 [e:\dev\ruby\vm_insnhelper.c @ 1444]
0a 000000a8`1191e7a0 00007ff7`148e35d6 miniruby!vm_call_cfunc_with_frame+0x38b [e:\dev\ruby\vm_insnhelper.c @ 1604]
0b 000000a8`1191e8b0 00007ff7`148e3a1e miniruby!vm_call_cfunc+0x66 [e:\dev\ruby\vm_insnhelper.c @ 1700]
0c 000000a8`1191e8e0 00007ff7`148de787 miniruby!vm_call_method+0x12e [e:\dev\ruby\vm_insnhelper.c @ 1984]
0d 000000a8`1191ea00 00007ff7`148e92db miniruby!vm_call_general+0x27 [e:\dev\ruby\vm_insnhelper.c @ 2146]
0e 000000a8`1191ea30 00007ff7`148f18ec miniruby!vm_exec_core+0x304b [e:\dev\ruby\insns.def @ 976]
0f 000000a8`1191f740 00007ff7`148da6cc miniruby!vm_exec+0xdc [e:\dev\ruby\vm.c @ 1472]
10 000000a8`1191f9a0 00007ff7`14758cd9 miniruby!rb_iseq_eval_main+0x2c [e:\dev\ruby\vm.c @ 1714]
11 000000a8`1191f9e0 00007ff7`147574dd miniruby!ruby_exec_internal+0xe9 [e:\dev\ruby\eval.c @ 250]
12 000000a8`1191fb80 00007ff7`14756e83 miniruby!ruby_exec_node+0x1d [e:\dev\ruby\eval.c @ 313]
13 000000a8`1191fbb0 00007ff7`14701041 miniruby!ruby_run_node+0x33 [e:\dev\ruby\eval.c @ 304]
14 000000a8`1191fbf0 00007ff7`1492a1dd miniruby!main+0x41 [e:\dev\ruby\main.c @ 38]
15 000000a8`1191fc30 00007ff7`1492a30e miniruby!__tmainCRTStartup+0x19d [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 626]
16 000000a8`1191fca0 00007ffd`1e3413d2 miniruby!mainCRTStartup+0xe [f:\dd\vctools\crt\crtw32\dllstuff\crtexe.c @ 466]
17 000000a8`1191fcd0 00007ffd`20295454 KERNEL32!BaseThreadInitThunk+0x22 [d:\9147\base\win32\client\thread.c @ 78]
18 000000a8`1191fd00 00000000`00000000 ntdll!RtlUserThreadStart+0x34 [d:\blue\minkernel\ntdll\rtlstrt.c @ 1026]
~~~

~~~
0:000> dt rp
Local var @ 0xa81191d5b0 
   +0x000 ReparseTag       : 0x80000013
   +0x004 ReparseDataLength : 0x7c
   +0x006 Reserved         : 0
   +0x008 SymbolicLinkReparseBuffer : <unnamed-tag>
   +0x008 MountPointReparseBuffer : <unnamed-tag>
~~~

0x80000013 is IO_REPARSE_TAG_DEDUP. I am using Windows Server Data Dedup on this volume. (http://blogs.technet.com/b/filecab/archive/2012/05/21/introduction-to-data-deduplication-in-windows-server-2012.aspx)

So we return EINVAL

~~~
    else if (rp.ReparseTag != IO_REPARSE_TAG_SYMLINK &&
	     rp.ReparseTag != IO_REPARSE_TAG_MOUNT_POINT){
	e = EINVAL;
    }
~~~



-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next