[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