partial writes in bse-jack?




hi Stefan.

i'm wondering how you could ever encounter partial writes
in bse-jack. i.e. jack_device_write() being called with a
full engine block and not enough space in the ringbuffer
being available to write all the data:
1) why is jack_device_write() being called when there
   was no prior jack_device_check_io() that returned TRUE
   or timeout==0?
2) why would jack_device_check_io() return TRUE if not
   enough ringbuffer data can be written?

maybe helpful remarks:
- bseenginemaster.c:master_poll_check() checks the poll functions
  for the master thread and decides whether data processing is
  neccessary, flagged in bseenginemaster.c:master_need_process.
- the only current poll function is added via bse_job_add_poll() in
  bsepcmmodule.c: bsepcmmodule.c:bse_pcm_module_poll().
- in this case, the poll function bse_pcm_module_poll() simply passes
  on the PCM driver's check_io() results 1:1.
- the engine shouldn't start processing data, if no poll funciton
  returned TRUE or *timeout==0.

so in theory, if your check_io() function was correctly implemented,
i'd expect partial writes to never occour. (that being said, it might
still make sense to guard against them via a Cond or similar, in case
more poll funcitons are being added in the future.)

---
ciaoTJ



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]