[CRIU] crash in pb_read_one?
Tycho Andersen
tycho.andersen at canonical.com
Wed Sep 17 07:37:58 PDT 2014
On Wed, Sep 17, 2014 at 06:27:14PM +0400, Pavel Emelyanov wrote:
> On 09/17/2014 06:05 PM, Tycho Andersen wrote:
> > Hi Pavel,
> >
> > On Tue, Sep 16, 2014 at 02:50:09PM -0500, Tycho Andersen wrote:
> >>
> >> Yes, this is very sticky.
> >
> > I think I've finally gotten it to a state where I understand
> > everything about the synchronization. I am having problems using
> > rst_mem_alloc and friends, though. The top two patches here are the
> > ones that are causing problems:
> >
> > https://github.com/tych0/criu/commits/missing-pid
> >
> > The one that segfaults is (I think?) closer to the right way to do
> > things, but the pointer in task_args is bad, so when we call
> > wait_helpers it segfaults.
>
> You misuse the rst-mem API. The proper usage is:
>
> In CRIU:
>
> foo_pos = rst_mem_cpos(type);
> while (...) {
> foo = rst_mem_alloc(type, size);
> init_foo(foo);
> }
>
> /* after rst_mem_remap() */
>
> task_args->foo = rst_mem_remap_ptr(foo_pos, type);
>
> In restorer blob:
>
> use_foo(task_args->foo);
>
>
> In your patch you call rst_mem_remap_ptr not on _pos, but
> on the allocated mem.
>
> And one more thing -- the rst_mem_grow_last is not required for
> the usage described, as you pin the beginning of your buffer
> first (with the rst_mem_cpos()), then grow it.
Excellent, thanks for the writeup!
Tycho
>
> > Any thoughts are much appreciated,
> >
> > Tycho
> >
>
More information about the CRIU
mailing list