- do not use GetShortName approach for mmap on windows (#408)

- additional test for long file names on windows

Signed-off-by: raver119 <raver119@gmail.com>
master
raver119 2020-04-23 08:24:49 +03:00 committed by GitHub
parent 2ecabde500
commit 8f765c80ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 3 deletions

View File

@ -145,8 +145,6 @@ void _mmap(Nd4jLong* result, size_t length, const char *fileName) {
auto shortName = new TCHAR[sz];
GetShortPathName(fileName, shortName, sz);
delete[] shortName;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4293)
@ -170,7 +168,9 @@ void _mmap(Nd4jLong* result, size_t length, const char *fileName) {
#pragma warning(pop)
#endif
h = CreateFile(shortName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
h = CreateFileA(fileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
delete[] shortName;
if (h == INVALID_HANDLE_VALUE) {
errno = __map_mman_error(GetLastError(), EPERM);

View File

@ -357,6 +357,29 @@ public class SpecialWorkspaceTests extends BaseNd4jTest {
}
}
@Test
public void testMmapedWorkspace_Path_Limits_1() throws Exception {
if (!Nd4j.getEnvironment().isCPU())
return;
// getting very long file name
val builder = new StringBuilder("long_file_name_");
for (int e = 0; e < 100; e++)
builder.append("9");
val tmpFile = Files.createTempFile("some", builder.toString());
val mmap = WorkspaceConfiguration.builder()
.initialSize(200 * 1024L * 1024L) // 200mbs
.tempFilePath(tmpFile.toAbsolutePath().toString())
.policyLocation(LocationPolicy.MMAP)
.build();
try (val ws = Nd4j.getWorkspaceManager().getAndActivateWorkspace(mmap, "M2")) {
val x = Nd4j.rand(DataType.FLOAT, 1024);
}
}
@Override
public char ordering() {
return 'c';