Hi again,

I have found that it is was a memory corruption earlier in the code
which destroys exactly this vector content....

Apologize for this post, protobuf are bugless :-)
Thanks,

On 15 sep, 16:07, LMazuel <[email protected]> wrote:
> Hi all,
>
> I'm very disappointed by a Segmentation Fault in my program using the
> protobuf library (2.4.1, C++). This comes from
> ShutdownProtobufLibrary, is systematic (differents machines,
> compilation optimisation enabled or not which excludes some random
> memory error) and has the following stack:
>
> #0  0x00007f924f7c4165 in *__GI_raise (sig=<value optimized out>)
> at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
> #1  0x00007f924f7c6f70 in *__GI_abort () at abort.c:92
> #2  0x00007f924f7fa27b in __libc_message (do_abort=<value optimized
> out>, fmt=<value optimized out>) at ../sysdeps/unix/sysv/linux/
> libc_fatal.c:189
> #3  0x00007f924f803ad6 in malloc_printerr (action=3,
> str=0x7f924f8b7ad6 "corrupted double-linked list", ptr=<value
> optimized out>) at malloc.c:6267
> #4  0x00007f924f803f0d in malloc_consolidate (av=<value optimized
> out>) at malloc.c:5145
> #5  0x00007f924f805418 in _int_free (av=0x7f924faeee40, p=0x25da640)
> at malloc.c:5018
> #6  0x00007f924f80884c in *__GI___libc_free (mem=<value optimized
> out>) at malloc.c:3739
> #7  0x00007f9253715699 in
> __gnu_cxx::new_allocator<std::string*>::deallocate (this=0x953c20,
> __in_chrg=<value optimized out>) at /usr/include/c++/4.4/ext/
> new_allocator.h:95
> #8  std::_Vector_base<std::string*, 
> std::allocator<std::string*>>::_M_deallocate (this=0x953c20, __in_chrg=<value 
> optimized out>) at /
>
> usr/include/c++/4.4/bits/stl_vector.h:146
> #9  ~_Vector_base (this=0x953c20, __in_chrg=<value optimized out>) at /
> usr/include/c++/4.4/bits/stl_vector.h:132
> #10 ~vector (this=0x953c20, __in_chrg=<value optimized out>) at /usr/
> include/c++/4.4/bits/stl_vector.h:313
> #11 ~Tables (this=0x953c20, __in_chrg=<value optimized out>) at google/
> protobuf/descriptor.cc:497
> #12 0x00007f92537158fa in ~scoped_ptr (this=0x953b90, __in_chrg=<value
> optimized out>) at ./google/protobuf/stubs/common.h:456
> #13 ~DescriptorPool (this=0x953b90, __in_chrg=<value optimized out>)
> at google/protobuf/descriptor.cc:784
> #14 0x00007f9253715972 in DeleteGeneratedPool () at google/protobuf/
> descriptor.cc:810
> #15 0x00007f92536f84a3 in google::protobuf::ShutdownProtobufLibrary ()
> at google/protobuf/stubs/common.cc:360
>
> After investigating with gdb, it comes from the destructor
> "DescriptorPool::Tables::~Tables()", precisely while calling the
> destructor of the field "strings_" in the "Tables" class.
>
> This seems that the internal structure of the vector has already been
> destructed. It is simple to reproduce *exactly* this stack trace by
> doing code like:
>
> {
>   vector<string*> v(4);
>   delete &v[0];
>
> } // Segmentation fault
>
> Then, it is possible that some structure has access to the internal
> contiguous buffer of the "strings_" vector (as we can do sometime to
> talk with pure C code)?
>
> To give some details about my implementation, I use dynamic linking of
> the protobuf library. There is at least one call do "dlopen/
> dlclose" (plugin architecture) at a time in the process. All works
> fine, the error coming from the final C++ cleaning:
> #17 0x00007f924f7c85e2 in __run_exit_handlers (status=0,
> listp=0x7f924faed4a8, run_list_atexit=true) at exit.c:78
> #18 0x00007f924f7c8635 in *__GI_exit (status=10700) at exit.c:100
> #19 0x00007f924f7b0c54 in __libc_start_main (main=<value optimized
> out>, argc=<value optimized out>, ubp_av=<value optimized out>,
> init=<value optimized out>, fini=<value optimized out>,
> rtld_fini=<value optimized out>,
>     stack_end=0x7fffe9974ee8) at libc-start.c:260
> #20 0x0000000000510679 in _start ()
>
> If someone has an idea....
> Thank you by advance!

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

Reply via email to