I think it is expected that the application remember information that it wants to upon discovery callback. As to why the CSDK frees references that it hands up to a higher layer, I do not know. There must have been some logical reason behind that decision.
I can suggest a hack though if you want to keep the discovery payload. Just ?Steal the pointer?. Keep a copy of the pointer in your application and then assign the pointer in the response struct to NULL or an empty discovery payload if the code that frees discovery payload expects things to be NOT NULL. Again, this is? hacky. It?d be idiomatic to maintain state in a more elegant way. From: iotivity-dev-bounces at lists.iotivity.org [mailto:[email protected]] On Behalf Of Morten Nielsen Sent: Sunday, December 18, 2016 7:49 AM To: iotivity-dev at lists.iotivity.org Subject: [dev] Destroying payloads I?ve noticed that the C SDK generally destroys payloads as soon as it can. For instance when you pass in a payload to OCDoResource, it?s destroyed at the end of the call. Or when I get a discovery payload back, it?s destroyed immediately after the callback of the discovery. In the latter case I might want to perform an asynchronous get of the resource?s properties, but after that point the discovery payload has been destroyed and I now have a dangling useless pointer (and there?s no method for cloning the discovery payload as a workaround). I?m really confused why there?s a bunch of destroy methods in the C-SDK, but it seems it is taking over destroying resources for me before I had a chance to be done with them. Is there a way to take back control of references that I pass in, or get as an output? If I create them, or get them as a result, I should be in charge of their lifecycle. Without it, it makes it completely unpredictable when a handle is still valid or not. Generally I would want my higher-level container classes to destroy the CSDK references when they go out of scope, but I have no clue if they have already been destroyed by the C SDK ? it really depends on whether they have been used as input to a method at some point, or was a return value from a callback. Thanks /Morten -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20161219/dc6a0688/attachment.html>
