Christoph Permes wrote:
> Hi,
>
> I've created a patch that provides a workaround for the segmentation
> fault:
>
> --- a/src/rtdk/rt_print.c 2009-05-21 16:34:54.000000000 +0200
> +++ b/src/rtdk/rt_print.c 2009-09-04 10:09:19.000000000 +0200
> @@ -40,6 +40,7 @@
> struct entry_head {
> FILE *dest;
> uint32_t seq_no;
> + uint32_t len;
> char text[1];
> } __attribute__((packed));
>
> @@ -113,6 +114,7 @@
> /* Write out empty entry */
> head = buffer->ring + write_pos;
> head->seq_no = __seq_no;
> + head->len = 0;
> head->text[0] = 0;
>
> /* Forward to the ring buffer start */
> @@ -146,6 +148,7 @@
> /* If we were able to write some text, finalise the entry */
> if (len > 0) {
> head->seq_no = ++__seq_no;
> + head->len = len;
> head->dest = stream;
>
> /* Move forward by text and head length */
> @@ -158,6 +161,7 @@
> /* An empty entry marks the wrap-around */
> head = buffer->ring + write_pos;
> head->seq_no = __seq_no;
> + head->len = 0;
> head->text[0] = 0;
>
> write_pos = 0;
> @@ -373,7 +377,7 @@
>
> read_pos = buffer->read_pos;
> head = buffer->ring + read_pos;
> - len = strlen(head->text);
> + len = head->len;
>
> if (len) {
> /* Print out non-empty entry and proceed */
>
> With this patch I get no segfaults anymore, but of course it would be
> interesting why parts of the ring buffer are overwritten with null
> characters.
>
Frankly, I'm suspecting some issue in your application here - at least
as long as you do not have some broken-out test case for us...
Jan
--
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help