[PD-dev] changes in atom_getsymbol between pd 0.40-3 and 0.42.4?
B. Bogart
ben at ekran.org
Wed Feb 17 18:44:29 CET 2010
Thanks Claude,
I'm not done much (almost none) mem management in C.
As far as I understand it my struct is being allocated a new space in
memory with:
gphoto_gimme_struct *threadArgs = (gphoto_gimme_struct
*)malloc(sizeof(gphoto_gimme_struct));
So rather than copying the references to gphoto, s, argc and argv I
should copy the data at those locations into the newly allocated struct.
I tried as follows:
memcpy(&threadArgs->gphoto, &gphoto, sizeof(gphoto));
memcpy(&threadArgs->s, &s, sizeof(s));
memcpy(&threadArgs->argc, &argc, sizeof(argc));
memcpy(&threadArgs->argv, &argv, sizeof(argv));
I think I got the syntax right, as I can access the values.
Problem is the same issue persists. The argument still ends up being
"float" when read in the thread.
So what have I misunderstood?
Thanks for your help,
B. Bogart
Claude Heiland-Allen wrote:
> Hi,
>
> B. Bogart wrote:
>> The problem is passing the A_GIMME arguments from a wrapper function
>> to a function that runs in a separate thread.
>
> [snip]
>
> This is the thread safety problem right here:
>
>> threadArgs->argv = argv;
>
> You need to *copy* *all* the data needed by the child thread that might
> be modified in the main thread later.
>
> [snip]
>
>> In PD <.0.40.3 the proper argument is printed from both the thread and
>> in the spawning function.
>
> You've just been lucky!
>
>> How does the symbol "input.jpg" end up turning into "float" in 0.42.4?
>
> It could turn into anything - when the inlet method exits pd can do what
> it likes with the argv memory...
>
>> Any ideas for solutions?
>
> Copy the argv array into new memory.
>
>
>
> Claude
>
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at iem.at
> http://lists.puredata.info/listinfo/pd-dev
>
More information about the Pd-dev
mailing list