I think I have fixed the problem, atleast the value of pcm->private_data doesn't get currupted anymore...After enabling kernel debugging for semaphores/mutexes, I realised that code was sleeping in a place where it was not supposed to. I dont know/didn't check where exactly the memory was getting corrupted but after doing appropriate lock/unlock the pcm->private_data seems looks healthy.
But now when I do cat /dev/audio/ the machine just hangs!! Looking in to it.
Clemens, I was holding mutexes in register_codec(), there it was corrupting. Thanks for help.
-pharaoh.
On 6/19/07, Clemens Ladisch cladisch@fastmail.net wrote:
Pharaoh . wrote:
in register codec 4 pvt data is c3d81180 Registering the sound card in register codec 5 pvt data is c3998f20
i.e. after registering the sound card the value changes/gets corrupted, and c3998f20 is not the value I get everytime, so I am thinking it is corrrupted
somehow.
I'd guess the memory gets overwritten.
But back in probe, after above function are executed, i.e. after register codec is over, I get the correct value for eac->pcm->private_data i.e. c3d81180, but by now the value of pcm->private_data is corrupted!
This implies that eac->pcm != pcm.
It seems quite a lot of memory gets corrupted. Try to check which one of the various "eac" and "pcm" pointers changes its value.
HTH Clemens