From b51f2a88de40627eae1edb36a693c2f98ef731b9 Mon Sep 17 00:00:00 2001 From: zsmoore Date: Thu, 16 Feb 2017 01:41:05 -0500 Subject: [PATCH 1/8] added new lock test to check do i hold functionality. tested on incorrect implementation, fails. tested on correct implementation, passed. --- kern/include/test.h | 1 + kern/main/menu.c | 2 ++ kern/test/synchtest.c | 70 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/kern/include/test.h b/kern/include/test.h index 9445a5c..1d3ce16 100644 --- a/kern/include/test.h +++ b/kern/include/test.h @@ -61,6 +61,7 @@ int semtest(int, char **); int locktest(int, char **); int locktest2(int, char **); int locktest3(int, char **); +int locktest4(int, char **); int cvtest(int, char **); int cvtest2(int, char **); int cvtest3(int, char **); diff --git a/kern/main/menu.c b/kern/main/menu.c index c104187..1638448 100644 --- a/kern/main/menu.c +++ b/kern/main/menu.c @@ -593,6 +593,7 @@ static const char *testmenu[] = { "[lt1] Lock test 1 (1) ", "[lt2] Lock test 2 (1*) ", "[lt3] Lock test 3 (1*) ", + "[lt4] Lock test 4 (1) ", "[cvt1] CV test 1 (1) ", "[cvt2] CV test 2 (1) ", "[cvt3] CV test 3 (1*) ", @@ -743,6 +744,7 @@ static struct { { "lt1", locktest }, { "lt2", locktest2 }, { "lt3", locktest3 }, + { "lt4", locktest4 }, { "cvt1", cvtest }, { "cvt2", cvtest2 }, { "cvt3", cvtest3 }, diff --git a/kern/test/synchtest.c b/kern/test/synchtest.c index 23bb151..1a8d2a9 100644 --- a/kern/test/synchtest.c +++ b/kern/test/synchtest.c @@ -238,6 +238,29 @@ fail2: return; } +static +void +locktestthread2(void *junk, unsigned long num) +{ + (void)junk; + + if(num == 0){ + lock_acquire(testlock); + } + else{ + if(lock_do_i_hold(testlock)){ + goto fail; + } + } + + V(donesem); + return; + +fail: + failif(true); + V(donesem); + return; +} int locktest(int nargs, char **args) @@ -314,7 +337,7 @@ locktest2(int nargs, char **args) { return 0; } - + int locktest3(int nargs, char **args) { (void)nargs; @@ -341,6 +364,51 @@ locktest3(int nargs, char **args) { return 0; } +int +locktest4(int nargs, char **args) { + (void) nargs; + (void) args; + + kprintf_n("Starting lt4...\n"); + + test_status = TEST161_SUCCESS; + + testlock = lock_create("testlock"); + if(testlock == NULL) { + panic("lt4: lock_create failed\n"); + } + + donesem = sem_create("donesem", 0); + if (donesem == NULL) { + lock_destroy(testlock); + panic("lt1: sem_create failed\n"); + } + + int i, result; + for (i=0; i<2; i++) { + kprintf_t("."); + result = thread_fork("lt4", NULL, locktestthread2, NULL, i); + if (result) { + panic("lt1: thread_fork failed: %s\n", strerror(result)); + } + } + + for(i=0; i<2; i++) { + kprintf_t("."); + P(donesem); + } + + lock_destroy(testlock); + sem_destroy(donesem); + testlock = NULL; + donesem = NULL; + + kprintf_t("\n"); + success(test_status, SECRET, "lt1"); + + return 0; +} + static void cvtestthread(void *junk, unsigned long num) From 8eb6dc55df81b6c993854dd2cf53ce56de536545 Mon Sep 17 00:00:00 2001 From: Zachary Moore Date: Thu, 16 Feb 2017 12:19:53 -0500 Subject: [PATCH 2/8] Changed spaces to tabs on synch.c --- kern/test/synchtest.c | 72 +++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/kern/test/synchtest.c b/kern/test/synchtest.c index 1a8d2a9..a712858 100644 --- a/kern/test/synchtest.c +++ b/kern/test/synchtest.c @@ -242,24 +242,24 @@ static void locktestthread2(void *junk, unsigned long num) { - (void)junk; + (void)junk; - if(num == 0){ - lock_acquire(testlock); - } - else{ - if(lock_do_i_hold(testlock)){ - goto fail; - } - } + if(num == 0){ + lock_acquire(testlock); + } + else{ + if(lock_do_i_hold(testlock)){ + goto fail; + } + } - V(donesem); - return; + V(donesem); + return; fail: - failif(true); - V(donesem); - return; + failif(true); + V(donesem); + return; } int @@ -366,47 +366,47 @@ locktest3(int nargs, char **args) { int locktest4(int nargs, char **args) { - (void) nargs; - (void) args; + (void) nargs; + (void) args; - kprintf_n("Starting lt4...\n"); + kprintf_n("Starting lt4...\n"); - test_status = TEST161_SUCCESS; + test_status = TEST161_SUCCESS; - testlock = lock_create("testlock"); - if(testlock == NULL) { - panic("lt4: lock_create failed\n"); - } + testlock = lock_create("testlock"); + if(testlock == NULL) { + panic("lt4: lock_create failed\n"); + } - donesem = sem_create("donesem", 0); - if (donesem == NULL) { - lock_destroy(testlock); - panic("lt1: sem_create failed\n"); + donesem = sem_create("donesem", 0); + if (donesem == NULL) { + lock_destroy(testlock); + panic("lt4: sem_create failed\n"); } - int i, result; + int i, result; for (i=0; i<2; i++) { kprintf_t("."); result = thread_fork("lt4", NULL, locktestthread2, NULL, i); if (result) { - panic("lt1: thread_fork failed: %s\n", strerror(result)); + panic("lt4: thread_fork failed: %s\n", strerror(result)); } } - for(i=0; i<2; i++) { - kprintf_t("."); - P(donesem); - } + for(i=0; i<2; i++) { + kprintf_t("."); + P(donesem); + } - lock_destroy(testlock); - sem_destroy(donesem); + lock_destroy(testlock); + sem_destroy(donesem); testlock = NULL; - donesem = NULL; + donesem = NULL; kprintf_t("\n"); success(test_status, SECRET, "lt1"); - return 0; + return 0; } static From b8b57b14a6deb701b474d56561dd11ddd8296e68 Mon Sep 17 00:00:00 2001 From: Zachary Moore Date: Thu, 16 Feb 2017 12:20:47 -0500 Subject: [PATCH 3/8] Changed spaces to tabs in menu.c --- kern/main/menu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kern/main/menu.c b/kern/main/menu.c index 1638448..4d2feb6 100644 --- a/kern/main/menu.c +++ b/kern/main/menu.c @@ -593,7 +593,7 @@ static const char *testmenu[] = { "[lt1] Lock test 1 (1) ", "[lt2] Lock test 2 (1*) ", "[lt3] Lock test 3 (1*) ", - "[lt4] Lock test 4 (1) ", + "[lt4] Lock test 4 (1) ", "[cvt1] CV test 1 (1) ", "[cvt2] CV test 2 (1) ", "[cvt3] CV test 3 (1*) ", @@ -744,7 +744,7 @@ static struct { { "lt1", locktest }, { "lt2", locktest2 }, { "lt3", locktest3 }, - { "lt4", locktest4 }, + { "lt4", locktest4 }, { "cvt1", cvtest }, { "cvt2", cvtest2 }, { "cvt3", cvtest3 }, From 694062537dfe69fd2f9ccbc4cf516601a5bf6f57 Mon Sep 17 00:00:00 2001 From: Zachary Moore Date: Thu, 16 Feb 2017 12:32:34 -0500 Subject: [PATCH 4/8] switched string from lt1 to lt4 --- kern/test/synchtest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kern/test/synchtest.c b/kern/test/synchtest.c index a712858..94740c3 100644 --- a/kern/test/synchtest.c +++ b/kern/test/synchtest.c @@ -404,7 +404,7 @@ locktest4(int nargs, char **args) { donesem = NULL; kprintf_t("\n"); - success(test_status, SECRET, "lt1"); + success(test_status, SECRET, "lt4"); return 0; } From 434a8856c67c22b2beadae561407d8d932e7c78e Mon Sep 17 00:00:00 2001 From: zsmoore Date: Thu, 16 Feb 2017 18:15:14 -0500 Subject: [PATCH 5/8] Added more functionality to lock test 4 to also make sure release functions properly --- kern/main/menu.c | 2 +- kern/test/synchtest.c | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/kern/main/menu.c b/kern/main/menu.c index 4d2feb6..3b8f2e0 100644 --- a/kern/main/menu.c +++ b/kern/main/menu.c @@ -593,7 +593,7 @@ static const char *testmenu[] = { "[lt1] Lock test 1 (1) ", "[lt2] Lock test 2 (1*) ", "[lt3] Lock test 3 (1*) ", - "[lt4] Lock test 4 (1) ", + "[lt4] Lock test 4 (1*) ", "[cvt1] CV test 1 (1) ", "[cvt2] CV test 2 (1) ", "[cvt3] CV test 3 (1*) ", diff --git a/kern/test/synchtest.c b/kern/test/synchtest.c index 94740c3..8db917c 100644 --- a/kern/test/synchtest.c +++ b/kern/test/synchtest.c @@ -243,14 +243,17 @@ void locktestthread2(void *junk, unsigned long num) { (void)junk; - + //first thread acquire lock if(num == 0){ lock_acquire(testlock); } else{ + //test lock do i hold if(lock_do_i_hold(testlock)){ goto fail; } + //make sure release panics based on thread matching + lock_release(testlock); } V(donesem); @@ -370,8 +373,7 @@ locktest4(int nargs, char **args) { (void) args; kprintf_n("Starting lt4...\n"); - - test_status = TEST161_SUCCESS; + kprintf_n("(This test panics on success!)\n"); testlock = lock_create("testlock"); if(testlock == NULL) { @@ -384,6 +386,7 @@ locktest4(int nargs, char **args) { panic("lt4: sem_create failed\n"); } + //Only 2 threads for simplification int i, result; for (i=0; i<2; i++) { kprintf_t("."); @@ -398,13 +401,17 @@ locktest4(int nargs, char **args) { P(donesem); } - lock_destroy(testlock); + + //no lock destroy in case a panic is triggered sem_destroy(donesem); testlock = NULL; donesem = NULL; + secprintf(SECRET, "Should panic...", "lt4"); + + /* Should not get here on success. */ kprintf_t("\n"); - success(test_status, SECRET, "lt4"); + success(TEST161_FAIL, SECRET, "lt4"); return 0; } From 2be98d540e0dd6cdabe53f96cda0cf39f150aa91 Mon Sep 17 00:00:00 2001 From: Zachary Moore Date: Thu, 16 Feb 2017 18:18:00 -0500 Subject: [PATCH 6/8] Formatted code to align tabs --- kern/test/synchtest.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/kern/test/synchtest.c b/kern/test/synchtest.c index 8db917c..259f106 100644 --- a/kern/test/synchtest.c +++ b/kern/test/synchtest.c @@ -243,7 +243,8 @@ void locktestthread2(void *junk, unsigned long num) { (void)junk; - //first thread acquire lock + + //first thread acquire lock if(num == 0){ lock_acquire(testlock); } @@ -252,8 +253,8 @@ locktestthread2(void *junk, unsigned long num) if(lock_do_i_hold(testlock)){ goto fail; } - //make sure release panics based on thread matching - lock_release(testlock); + //make sure release panics based on thread matching + lock_release(testlock); } V(donesem); @@ -373,7 +374,7 @@ locktest4(int nargs, char **args) { (void) args; kprintf_n("Starting lt4...\n"); - kprintf_n("(This test panics on success!)\n"); + kprintf_n("(This test panics on success!)\n"); testlock = lock_create("testlock"); if(testlock == NULL) { @@ -386,7 +387,7 @@ locktest4(int nargs, char **args) { panic("lt4: sem_create failed\n"); } - //Only 2 threads for simplification + //Only 2 threads for simplification int i, result; for (i=0; i<2; i++) { kprintf_t("."); @@ -402,14 +403,15 @@ locktest4(int nargs, char **args) { } - //no lock destroy in case a panic is triggered + //no lock destroy in case a panic is triggered, memory leak necessary sem_destroy(donesem); testlock = NULL; donesem = NULL; secprintf(SECRET, "Should panic...", "lt4"); - /* Should not get here on success. */ + /* Should not get here on success. */ + kprintf_t("\n"); success(TEST161_FAIL, SECRET, "lt4"); From 7f40aaa46193fdcd1b41d1cdb9eac25b9e101b2f Mon Sep 17 00:00:00 2001 From: Zachary Moore Date: Thu, 16 Feb 2017 18:30:16 -0500 Subject: [PATCH 7/8] alignment --- kern/main/menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kern/main/menu.c b/kern/main/menu.c index 3b8f2e0..2819847 100644 --- a/kern/main/menu.c +++ b/kern/main/menu.c @@ -593,7 +593,7 @@ static const char *testmenu[] = { "[lt1] Lock test 1 (1) ", "[lt2] Lock test 2 (1*) ", "[lt3] Lock test 3 (1*) ", - "[lt4] Lock test 4 (1*) ", + "[lt4] Lock test 4 (1*) ", "[cvt1] CV test 1 (1) ", "[cvt2] CV test 2 (1) ", "[cvt3] CV test 3 (1*) ", From 4298d0634f2bd23559d8c29f3d7463c5822e1c33 Mon Sep 17 00:00:00 2001 From: Zachary Moore Date: Thu, 16 Feb 2017 18:30:51 -0500 Subject: [PATCH 8/8] alignment --- kern/test/synchtest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kern/test/synchtest.c b/kern/test/synchtest.c index 259f106..ce8c7f0 100644 --- a/kern/test/synchtest.c +++ b/kern/test/synchtest.c @@ -249,7 +249,7 @@ locktestthread2(void *junk, unsigned long num) lock_acquire(testlock); } else{ - //test lock do i hold + //test lock do i hold if(lock_do_i_hold(testlock)){ goto fail; }