[alsa-devel] Scope of snd_pcm_hw_params_alloca() ?
I've spent a couple of days pining this down.
snd_pcm_hw_params_alloca() is part of the user API -right? But accomplished as a #define in pcm.h.
However if it is called inside a function, and the pointer stored for future use, after leaving the function the allocation seems to have gone, and attempting thereafter to use the pointer to access the hwparams space in another API function results in seg-fault.
This seems rather counter-intuitive (ie unexpected) to someone who has no knowledge of the inner workings, but simply uses the API; the allocation disappears without having been specifically free'd or released in any way. I know that calling it globally gets round the problem, but certainly I could do without all the debug needed to discover that.
Comments?
Alan
At Thu, 13 Mar 2008 16:21:51 +0000, Alan Horstmann wrote:
I've spent a couple of days pining this down.
snd_pcm_hw_params_alloca() is part of the user API -right? But accomplished as a #define in pcm.h.
Because alloca can be used only with a macro due to its nature.
However if it is called inside a function, and the pointer stored for future use, after leaving the function the allocation seems to have gone, and attempting thereafter to use the pointer to access the hwparams space in another API function results in seg-fault.
This seems rather counter-intuitive (ie unexpected) to someone who has no knowledge of the inner workings, but simply uses the API; the allocation disappears without having been specifically free'd or released in any way. I know that calling it globally gets round the problem, but certainly I could do without all the debug needed to discover that.
Well, alloca() is an (almost) standard stuff. You had a good lecture for a bit more deep studying C :)
Takashi
On Thursday 13 March 2008 16:44, you wrote:
At Thu, 13 Mar 2008 16:21:51 +0000,
Alan Horstmann wrote:
snd_pcm_hw_params_alloca() is part of the user API -right? But accomplished as a #define in pcm.h.
Because alloca can be used only with a macro due to its nature.
However if it is called inside a function, and the pointer stored for future use, after leaving the function the allocation seems to have gone, and attempting thereafter to use the pointer to access the hwparams space in another API function results in seg-fault.
So would it be better in this case to use the malloc /free functions if possible? Am I right that they are not provided in salsa, so alloca would be necessary to use that lib?
Alan
At Fri, 14 Mar 2008 12:19:57 +0000, Alan Horstmann wrote:
On Thursday 13 March 2008 16:44, you wrote:
At Thu, 13 Mar 2008 16:21:51 +0000,
Alan Horstmann wrote:
snd_pcm_hw_params_alloca() is part of the user API -right? But accomplished as a #define in pcm.h.
Because alloca can be used only with a macro due to its nature.
However if it is called inside a function, and the pointer stored for future use, after leaving the function the allocation seems to have gone, and attempting thereafter to use the pointer to access the hwparams space in another API function results in seg-fault.
So would it be better in this case to use the malloc /free functions if possible?
No, it depends on your purpose.
The merit of alloca is that it's really a temporary variable that requires no explicit destructor, and is faster and lighter than malloc/free. If you don't need to reuse it, you can safely use alloca. But if you need to reused the allocated record later, malloc is the only choice.
Am I right that they are not provided in salsa, so alloca would be necessary to use that lib?
Hm? It's provided in SALSA, too.
Takashi
participants (2)
-
Alan Horstmann
-
Takashi Iwai