Module: xenomai-forge
Branch: master
Commit: b274390580d24181c7d592041a2c3a1306040712
URL:    
http://git.xenomai.org/?p=xenomai-forge.git;a=commit;h=b274390580d24181c7d592041a2c3a1306040712

Author: Philippe Gerum <r...@xenomai.org>
Date:   Sun Dec 18 22:30:01 2011 +0100

alchemy/testsuite: buffer: test deletion during I/O operations

---

 lib/alchemy/testsuite/buffer-1.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/lib/alchemy/testsuite/buffer-1.c b/lib/alchemy/testsuite/buffer-1.c
index f0997bd..36411c2 100644
--- a/lib/alchemy/testsuite/buffer-1.c
+++ b/lib/alchemy/testsuite/buffer-1.c
@@ -28,6 +28,9 @@ static void foreground_task(void *arg)
                memset(buf,0, sizeof(buf));
                ret = rt_buffer_read(&buffer, buf, 2, TM_INFINITE);
                switch (ret) {
+               case -EINVAL:
+               case -EIDRM:    /* Fine, deleted. */
+                       goto out;
                case 1:
                        traceobj_assert(&trobj, buf[0] == ((n / 2) % 26) + 'A');
                        break;
@@ -39,7 +42,7 @@ static void foreground_task(void *arg)
                }
                n++;
        }
-
+out:
        traceobj_exit(&trobj);
 }
 
@@ -53,12 +56,16 @@ static void background_task(void *arg)
 
        for (;;) {
                ret = rt_buffer_write(&buffer, &c, 1, TM_INFINITE);
+               if (ret == -EINVAL || ret == -EIDRM)
+                       break;
                traceobj_assert(&trobj, ret == 1);
                c++;
                if (c > 'Z')
                        c = 'A';
                sprintf(s, "%.2d", 11 * n);
                ret = rt_buffer_write(&buffer, s, 2, TM_INFINITE);
+               if (ret == -EINVAL || ret == -EIDRM)
+                       break;
                traceobj_assert(&trobj, ret == 2);
                n = (n + 1) % 10;
        }
@@ -95,12 +102,6 @@ int main(int argc, char *const argv[])
        ret = rt_task_sleep(1500000000ULL);
        traceobj_assert(&trobj, ret == 0);
 
-       ret = rt_task_delete(&t_bgnd);
-       traceobj_assert(&trobj, ret == 0);
-
-       ret = rt_task_delete(&t_fgnd);
-       traceobj_assert(&trobj, ret == 0);
-
        ret = rt_buffer_delete(&buffer);
        traceobj_assert(&trobj, ret == 0);
 


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to