These don't look like they have anything to do with the I/O change.  The
"FileDescriptor" class describes the contents of a .proto file (it's not
related to OS file descriptors).  The problems you're seeing appear to be
happening while running global destructors -- i.e. at program shutdown.  Are
you sure that this is the result of switching from strings to ostreams?  I
strongly suspect that you changed something else at the same time which lead
to the problem, or the problem actually existed before the change and you
didn't notice for some reason.

On Wed, Oct 13, 2010 at 1:53 PM, CB <cn...@verizon.net> wrote:

> I've been using protobuf 2.3.0 for several weeks, using
> SerializeToString.  The
> other day, I switched to using SerializeToOstream, and started seeing
> the
> following invalid write and double free errors reported by valgrind
> when my
> program is terminated;
>
> ==15778== Invalid write of size 4
> ==15778==    at 0x6623464:
> google::protobuf::FileDescriptorTables::~FileDescriptorTables()
> (hashtable:532)
> ==15778==    by 0x4D821BE: __run_exit_handlers (exit.c:78)
> ==15778==    by 0x4D8222E: exit (exit.c:100)
> ==15778==    by 0x4D69BDD: (below main) (libc-start.c:258)
> ==15778==  Address 0x635dc80 is 0 bytes inside a block of size 48
> free'd
> ==15778==    at 0x4024851: operator delete(void*) (vg_replace_malloc.c:
> 387)
> ==15778==    by 0x4D821BE: __run_exit_handlers (exit.c:78)
> ==15778==    by 0x4D8222E: exit (exit.c:100)
> ==15778==    by 0x4D69BDD: (below main) (libc-start.c:258)
> ==15778==
> ==15778== Invalid free() / delete / delete[]
> ==15778==    at 0x4024851: operator delete(void*) (vg_replace_malloc.c:
> 387)
> ==15778==    by 0x4D821BE: __run_exit_handlers (exit.c:78)
> ==15778==    by 0x4D8222E: exit (exit.c:100)
> ==15778==    by 0x4D69BDD: (below main) (libc-start.c:258)
> ==15778==  Address 0x635dc80 is 0 bytes inside a block of size 48
> free'd
> ==15778==    at 0x4024851: operator delete(void*) (vg_replace_malloc.c:
> 387)
> ==15778==    by 0x4D821BE: __run_exit_handlers (exit.c:78)
> ==15778==    by 0x4D8222E: exit (exit.c:100)
> ==15778==    by 0x4D69BDD: (below main) (libc-start.c:258)
>
> The above are one example of several reports.  it appears there is one
> set of
> these for each proto message I have defined.
>
> I've tried to recreate this error in a smaller example program for
> several days
> without success.  Am wondering if anyone on the list has seen this
> problem, and
> knows what might cause it?
>
> I'm using SerializeToOstream in basically the following manner;
>
>
>  char buf[512];
>  std::stringbuf sbuf;
>  sbuf.pubsetbuf((char*)buf, 512);
>  std::ostream os(&sbuf);
>  message.SerializeToOstream(&os);
>
> Any feedback on how to further debug this problem would be
> appreciated.
>
> --CB
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to proto...@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to