At Tue, 10 Feb 2015 01:01:15 +0900, Takashi Sakamoto wrote:
On Feb 10 2015 00:28, Takashi Iwai wrote:
At Tue, 10 Feb 2015 00:02:06 +0900, Takashi Sakamoto wrote:
When event originator doesn't set numerical ID in identical information, the event data includes no numerical ID, thus userspace applications cannot identify the control just by unique ID in event data.
This commit fix this bug so as the event data includes all of identical information.
Signed-off-by: Takashi Sakamoto o-takashi@sakamocchi.jp
You can't overwrite id pointer in this case. It's a caller's object.
Exactly. I missed it...
One way to fix would be to copy the id instance. Another way would be to change up/down_write() with _read(), and include snd_ctl_notify() call with kctl->id inside the semaphore lock.
The former would be less changes but consume the stack significantly.
If any sub-effects are allowed, we can use caller's data via the pointer, like: memcpy(id, &kctl->id, sizeof(struct snd_ctl_elem_id); Then: snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_INFO, id);
That's what I suggested as the first example.
Takashi