Commit cdc05b26 authored by Kirill Smelkov's avatar Kirill Smelkov

Merge branch 'master' into t

* master:
  bigfile: Note that ramh_alloc_page does not add the page to any lists
  bigfile: Unstub ram_close
  bigfile/test/test_ram: Don't forget to free allocated Page structs
  bigfile: RAM must be explicitly free'ed after close
  bigfile/test: Don't forget to close opened RAM
  tests: TSAN no longer fails on test_virtmem
  tox: Don't duplicate setup.py on which for-tests dependencies we need
  3rdparty/ccan: Update
parents 87f40ade 4df72b04
Subproject commit c0b655441804c0edace4f539fb9008b315eb1bd8 Subproject commit ce4660aa49404530a608a37754fae16fbb3fde02
...@@ -76,11 +76,6 @@ test : test.t test.py test.fault test.asan test.tsan test.vgmem test.vghel test. ...@@ -76,11 +76,6 @@ test : test.t test.py test.fault test.asan test.tsan test.vgmem test.vghel test.
# TODO move XFAIL markers into *.c # TODO move XFAIL markers into *.c
# TSAN fails on test_virtmem (http://code.google.com/p/thread-sanitizer/issues/detail?id=75)
# NOTE the bug was fixed in compiler-rt 20140917 (6afe775d)
# -> we can remove this xfail when the fix propagates to gcc/clang release
XFAIL_bigfile/tests/test_virtmem.tsanrun := y
# Before calling our SIGSEGV handler, Memcheck first reports "invalid read|write" error. # Before calling our SIGSEGV handler, Memcheck first reports "invalid read|write" error.
# A solution could be to tell memcheck via VALGRIND_MAKE_MEM_DEFINED that VMA # A solution could be to tell memcheck via VALGRIND_MAKE_MEM_DEFINED that VMA
# address space is ok to access _before_ handling pagefault. # address space is ok to access _before_ handling pagefault.
......
/* Wendelin.bigfile | Interfaces to work with RAM /* Wendelin.bigfile | Interfaces to work with RAM
* Copyright (C) 2014-2015 Nexedi SA and Contributors. * Copyright (C) 2014-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
...@@ -87,8 +87,10 @@ RAMH *ramh_open(RAM *ram) ...@@ -87,8 +87,10 @@ RAMH *ramh_open(RAM *ram)
void ram_close(RAM *ram) void ram_close(RAM *ram)
{ {
WARN("TODO ram_close()"); // XXX // TODO assert that
//return ram->ram_ops->close(ram); // - there are no ramh open left
// - there are no pages on ram->lru_list
return ram->ram_ops->close(ram);
} }
......
/* Wendelin.bigfile | shmfs (aka tmpfs) ram backend /* Wendelin.bigfile | shmfs (aka tmpfs) ram backend
* Copyright (C) 2014-2015 Nexedi SA and Contributors. * Copyright (C) 2014-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
...@@ -243,11 +243,12 @@ out: ...@@ -243,11 +243,12 @@ out:
return NULL; return NULL;
} }
static void shmfs_ram_close(RAM *ram0);
static const struct ram_ops shmfs_ram_ops = { static const struct ram_ops shmfs_ram_ops = {
.get_current_maxsize = shmfs_get_current_maxsize, .get_current_maxsize = shmfs_get_current_maxsize,
.ramh_open = shmfs_ramh_open, .ramh_open = shmfs_ramh_open,
//.close = shmfs_ram_dtor .close = shmfs_ram_close,
}; };
...@@ -266,8 +267,11 @@ static RAM *shmfs_ram_new(const char *arg) ...@@ -266,8 +267,11 @@ static RAM *shmfs_ram_new(const char *arg)
return ram; return ram;
}; };
static void shmfs_ram_close(RAM *ram0)
// TODO shmfs_ram_dtor {
SHMFS_RAM *ram = upcast(SHMFS_RAM *, ram0);
free((void*)ram->prefix); ram->prefix = NULL;
}
static const struct ram_type shmfs_ram_type = { static const struct ram_type shmfs_ram_type = {
......
/* Wendelin.bigfile | virtual memory benchmarks /* Wendelin.bigfile | virtual memory benchmarks
* Copyright (C) 2017 Nexedi SA and Contributors. * Copyright (C) 2017-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
* it under the terms of the GNU General Public License version 3, or (at your * it under the terms of the GNU General Public License version 3, or (at your
...@@ -102,7 +102,7 @@ void bench_pagefault() { ...@@ -102,7 +102,7 @@ void bench_pagefault() {
vma_unmap(vma); vma_unmap(vma);
fileh_close(fh); fileh_close(fh);
ram_close(ram); ram_close(ram);
free(ram);
} }
int main() int main()
......
/* Wendelin.bigfile | ram tests /* Wendelin.bigfile | ram tests
* Copyright (C) 2014-2015 Nexedi SA and Contributors. * Copyright (C) 2014-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
...@@ -116,6 +116,10 @@ int main() ...@@ -116,6 +116,10 @@ int main()
xmunmap(p01, ps); xmunmap(p01, ps);
xmunmap(p02, ps); xmunmap(p02, ps);
xmunmap(p03, ps); xmunmap(p03, ps);
free(page0);
// page1: was not yet allocated
free(page2);
// page3: was not yet allocated
/* ensure we get "no memory" when overallocating (not doing so would lead /* ensure we get "no memory" when overallocating (not doing so would lead
...@@ -145,8 +149,17 @@ int main() ...@@ -145,8 +149,17 @@ int main()
// TODO allocate memory amount = 2*ram_maxsize and touch it linearly // TODO allocate memory amount = 2*ram_maxsize and touch it linearly
xmunmap(p0, ps);
xmunmap(p1, ps);
xmunmap(p2, ps);
free(page0);
free(page1);
free(page2);
ok1(!page3);
ramh_close(ramh); ramh_close(ramh);
ram_close(ram);
free(ram);
return 0; return 0;
} }
/* Wendelin.bigfile | virtual memory tests /* Wendelin.bigfile | virtual memory tests
* Copyright (C) 2014-2015 Nexedi SA and Contributors. * Copyright (C) 2014-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
...@@ -908,8 +908,8 @@ void test_file_access_synthetic(void) ...@@ -908,8 +908,8 @@ void test_file_access_synthetic(void)
/* free resources & restore SIGSEGV handler */ /* free resources & restore SIGSEGV handler */
ram_close(ram); ram_close(ram); free(ram);
ram_close(ram0); ram_close(ram0); free(ram0);
ok1(!sigaction(SIGSEGV, &saveact, NULL)); ok1(!sigaction(SIGSEGV, &saveact, NULL));
...@@ -1035,6 +1035,7 @@ void test_file_access_pagefault() ...@@ -1035,6 +1035,7 @@ void test_file_access_pagefault()
fileh_close(fh); fileh_close(fh);
// ok1(list_empty(&ram->lru_list)); // ok1(list_empty(&ram->lru_list));
ram_close(ram); ram_close(ram);
free(ram);
} }
...@@ -1105,6 +1106,7 @@ void test_pagefault_savestate() ...@@ -1105,6 +1106,7 @@ void test_pagefault_savestate()
vma_unmap(vma); vma_unmap(vma);
fileh_close(fh); fileh_close(fh);
ram_close(ram); ram_close(ram);
free(ram);
#undef CHECK_PAGE #undef CHECK_PAGE
#undef CHECK_NOPAGE #undef CHECK_NOPAGE
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#define _WENDELIN_BIGFILE_RAM_H_ #define _WENDELIN_BIGFILE_RAM_H_
/* Wendelin.bigfile | Interfaces to work with RAM /* Wendelin.bigfile | Interfaces to work with RAM
* Copyright (C) 2014-2015 Nexedi SA and Contributors. * Copyright (C) 2014-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
...@@ -92,9 +92,10 @@ size_t ram_get_current_maxsize(RAM *ram); ...@@ -92,9 +92,10 @@ size_t ram_get_current_maxsize(RAM *ram);
RAMH *ramh_open(RAM *ram); RAMH *ramh_open(RAM *ram);
/* close RAM /* ram_close releases resources associated with RAM.
* *
* TODO text * All RAM handles opened on this RAM must be closed.
* NOTE struct RAM itself is not released - it has to be explicitly freed by user.
*/ */
void ram_close(RAM *ram); void ram_close(RAM *ram);
...@@ -144,7 +145,10 @@ struct ramh_ops { ...@@ -144,7 +145,10 @@ struct ramh_ops {
* *
* XXX write on how to free pages (= drop & free(struct Page) ?) * XXX write on how to free pages (= drop & free(struct Page) ?)
* *
* NOTE after allocation, page->fileh & page->f_pgoffset are unset * NOTE after allocation:
*
* - page->fileh & page->f_pgoffset are unset;
* - page is not added to ram->lru_list and fileh->dirty_pages lists.
*/ */
Page *ramh_alloc_page(RAMH *ramh, pgoff_t pgoffset_hint); Page *ramh_alloc_page(RAMH *ramh, pgoff_t pgoffset_hint);
......
/* Copyright (C) 2014-2015 Nexedi SA and Contributors. /* Copyright (C) 2014-2019 Nexedi SA and Contributors.
* Kirill Smelkov <kirr@nexedi.com> * Kirill Smelkov <kirr@nexedi.com>
* *
* This program is free software: you can Use, Study, Modify and Redistribute * This program is free software: you can Use, Study, Modify and Redistribute
...@@ -95,8 +95,6 @@ void ram_limited_close(RAM *ram0) ...@@ -95,8 +95,6 @@ void ram_limited_close(RAM *ram0)
// XXX close if owning? // XXX close if owning?
// ram_close(ram->backend); // ram_close(ram->backend);
// TODO free(self) ?
} }
......
...@@ -11,8 +11,7 @@ envlist = py27-{ZODB3,ZODB4,ZODB5}-{zblk0,zblk1}-{fs,zeo,neo}-{numpy115,numpy116 ...@@ -11,8 +11,7 @@ envlist = py27-{ZODB3,ZODB4,ZODB5}-{zblk0,zblk1}-{fs,zeo,neo}-{numpy115,numpy116
[testenv] [testenv]
deps = deps =
# why tox does not get it from extras_require['test'] ? .[test]
pytest
# XXX temp hack # XXX temp hack
cython cython
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment