* [Xenomai] Improper closure of rt pipe
@ 2012-10-31 20:16 Makarand Pradhan
2012-10-31 22:50 ` Gilles Chanteperdrix
0 siblings, 1 reply; 3+ messages in thread
From: Makarand Pradhan @ 2012-10-31 20:16 UTC (permalink / raw)
To: xenomai@xenomai.org
Hi All,
While working with rt pipes I noticed that:
> When a process that is writing to the real time pipe is killed, I am
not able to write to the pipe again after restarting the process.
> When the pipe is closed properly with an fclose, then everything works.
> The only way to recover the rt pipe was to reboot the system.
Would highly appreciate if you can comment on this behaviour.
Is it the expected behaviour?
Is there a way to recover the rt pipe without rebooting? Anything that
can be done, on the other side of the pipe after detecting closure? I
have tried deleting and recreating the pipe with no luck. I am running
in user space so cannot flush the pipe.
Am attaching code that can be used to reproduce this issue.
I am running linux 3.0.0 on MPC8360.
Thanks and Rgds,
Makarand.
Real time task creating the pipe and reading the pipe:
rt_pipe.c
#include <xenomai/asm-generic/bits/current.h>
#include <stdio.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/mutex.h>
#include <native/timer.h>
#include <native/pipe.h>
#include <rtdk.h>
#include <stdlib.h>
#include <unistd.h>
RT_PIPE rt_pipe_1;
#define PIPE_NAME "pn"
#define PIPE_MINOR_NO 4
void task1_func(void *arg)
{
while(true)
{
int bytes_read = 0;
char buff[1024];
bytes_read = rt_pipe_read(&rt_pipe_1, buff, 1024, TM_INFINITE);
rt_printf("Read: %i\n", bytes_read);
if (0 == bytes_read)
{
int rc = 0;
// Delete and recreate.
rc = rt_pipe_delete(&rt_pipe_1);
rt_printf("Pipe delete: %i\n", rc);
rc = rt_pipe_create(&rt_pipe_1, PIPE_NAME, PIPE_MINOR_NO, 0);
rt_printf("Pipe creation: %i\n", rc);
}
rt_task_sleep(33333333LL);
}
}
int main(int argc, char **argv)
{
RT_TASK task0, task1;
int rc = 0;
mlockall(MCL_CURRENT|MCL_FUTURE);
/* Perform auto-init of rt_print buffers if the task doesn't do so */
rt_print_auto_init(1);
rt_task_shadow(&task0, "Task 0", 10, 0);
rc = rt_pipe_create(&rt_pipe_1, PIPE_NAME, PIPE_MINOR_NO, 0);
rt_printf("Pipe creation: %i\n", rc);
printf("Spawning: task1\n");
rt_task_spawn(&task1, "TASK1", 10, 0, 0, task1_func, NULL);
while (1) {
rt_task_sleep(5000000LL);
}
}
Linux thread that can be killed to cause the problem:
cat pipe_client.c
#include <xenomai/asm-generic/bits/current.h>
#include <stdio.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/mutex.h>
#include <native/timer.h>
#include <native/pipe.h>
#include <rtdk.h>
#include <stdlib.h>
#include <unistd.h>
#define PIPE_NAME "/proc/xenomai/registry/native/pipes/pn"
#define PIPE_MINOR_NO 4
int main(int argc, char **argv)
{
FILE *fp;
fp = fopen(PIPE_NAME, "r+");
while (1==1)
{
printf("fp: %p\n", fp);
fwrite("Test", 1, 4, fp);
sleep(5);
}
fclose(fp);
return 0;
}
--
___________________________________________________________________________
NOTICE OF CONFIDENTIALITY:
This e-mail and any attachments may contain confidential and privileged information. If you are
not the intended recipient, please notify the sender immediately by return e-mail and delete this
e-mail and any copies. Any dissemination or use of this information by a person other than the
intended recipient is unauthorized and may be illegal.
_____________________________________________________________________
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [Xenomai] Improper closure of rt pipe
2012-10-31 20:16 [Xenomai] Improper closure of rt pipe Makarand Pradhan
@ 2012-10-31 22:50 ` Gilles Chanteperdrix
2012-11-01 13:16 ` Makarand Pradhan
0 siblings, 1 reply; 3+ messages in thread
From: Gilles Chanteperdrix @ 2012-10-31 22:50 UTC (permalink / raw)
To: Makarand Pradhan; +Cc: xenomai@xenomai.org
Makarand Pradhan wrote:
> Hi All,
>
> While working with rt pipes I noticed that:
>
> > When a process that is writing to the real time pipe is killed, I am
> not able to write to the pipe again after restarting the process.
> > When the pipe is closed properly with an fclose, then everything works.
> > The only way to recover the rt pipe was to reboot the system.
>
> Would highly appreciate if you can comment on this behaviour.
> Is it the expected behaviour?
> Is there a way to recover the rt pipe without rebooting? Anything that
> can be done, on the other side of the pipe after detecting closure? I
> have tried deleting and recreating the pipe with no luck. I am running
> in user space so cannot flush the pipe.
>
> Am attaching code that can be used to reproduce this issue.
>
> I am running linux 3.0.0 on MPC8360.
Since it looks like a Xenomai bug, the really important information is the
version of Xenomai you are using. Anyway, this looks like a bug that was
reported a long time ago and fixed recently. Could you try the current HEAD
of the "master" branch in xenomai 2.6 git?
git://git.xenomai.org/xenomai-2.6.git
--
Gilles.
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [Xenomai] Improper closure of rt pipe
2012-10-31 22:50 ` Gilles Chanteperdrix
@ 2012-11-01 13:16 ` Makarand Pradhan
0 siblings, 0 replies; 3+ messages in thread
From: Makarand Pradhan @ 2012-11-01 13:16 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai@xenomai.org
On 31/10/12 06:50 PM, Gilles Chanteperdrix wrote:
> Makarand Pradhan wrote:
>> Hi All,
>>
>> While working with rt pipes I noticed that:
>>
>> > When a process that is writing to the real time pipe is killed, I am
>> not able to write to the pipe again after restarting the process.
>> > When the pipe is closed properly with an fclose, then everything works.
>> > The only way to recover the rt pipe was to reboot the system.
>>
>> Would highly appreciate if you can comment on this behaviour.
>> Is it the expected behaviour?
>> Is there a way to recover the rt pipe without rebooting? Anything that
>> can be done, on the other side of the pipe after detecting closure? I
>> have tried deleting and recreating the pipe with no luck. I am running
>> in user space so cannot flush the pipe.
>>
>> Am attaching code that can be used to reproduce this issue.
>>
>> I am running linux 3.0.0 on MPC8360.
> Since it looks like a Xenomai bug, the really important information is the
> version of Xenomai you are using. Anyway, this looks like a bug that was
> reported a long time ago and fixed recently. Could you try the current HEAD
> of the "master" branch in xenomai 2.6 git?
>
> git://git.xenomai.org/xenomai-2.6.git
>
We are running xenomai-2.6 (stable). Will try to go to the HEAD.
Rgds,
Makarand.
--
___________________________________________________________________________
NOTICE OF CONFIDENTIALITY:
This e-mail and any attachments may contain confidential and privileged information. If you are
not the intended recipient, please notify the sender immediately by return e-mail and delete this
e-mail and any copies. Any dissemination or use of this information by a person other than the
intended recipient is unauthorized and may be illegal.
_____________________________________________________________________
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-11-01 13:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-31 20:16 [Xenomai] Improper closure of rt pipe Makarand Pradhan
2012-10-31 22:50 ` Gilles Chanteperdrix
2012-11-01 13:16 ` Makarand Pradhan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.