>> However, the KASSERT, combined with AUDIO_SETINFO doing something,
>> indicates that it clearly is getting set.  So, I'm obviously missing
>> something.

>> What?

> I had need to look into the audio code some time back, so I think I
> can explain this:

> audio_open() in audio.c:

> 1. fills audio_file_t *af;
> 2. calls fd_allocfile(&fp, &fd);
> 3. does fd_clone() with `af' as last param;
> 4. fd_clone() does fp->f_data = af;
> 5. f_data is just f_undata.fd_data

> And, since f_undata is a union, step 4 sets fd_audioctx.

Oh, ick.  (This causes all fields of f_undata other than fd_data, or,
possibly, other void * fields - I'd have to think about that - to go
undefined, as in accessing them produces undefined behaviour.  I'm
slightly surprised undefined-behaviour detectors haven't been kicking
up a fuss.)

Thank you for explaining!

/~\ The ASCII                             Mouse
\ / Ribbon Campaign
 X  Against HTML                mo...@rodents-montreal.org
/ \ Email!           7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B

Reply via email to