> > A series of patches refactoring the somewhat-confusing > red_channel_client_init_send_data() function. The third argument to this > function is a RedPipeItem and it was never very obvious when or why we should > pass an item in this parameter. Sometimes callers passed NULL, and sometimes > they passed an item. It turns out that it's only necessary to pass the item > to > this parameter if the pipe item needs to be kept alive until we guarantee > that > the message has been sent. We only need to do this when we have marshalled > some > data by reference, and that data is owned by the RedPipeItem. To make this > more > obvious, I've attempted to refactor things so that we no longer rely on this > mechanism to keep the data alive, but instead reference the pipe item (or > other > structure that owns the referenced data) call _add_by_ref_full() to > unreference > the data after the message has been sent. > > Changes in v2: > - removed one merged patch > - this one compiles > > Changes in v3: > - introduce a new patch (#1) that ensures that marshaller data is freed as > soon as possible after the message is sent. This fixes an assert that > Frediano > ran into on the original patchset because some data was kept alive longer > than > expected. > - Use Frediano's SET/INIT patch (4) instead of my original approach > - squashed a fix (removing unused struct field) from Frediano into last > patch. > - removed another ACKed and pushed patch > > Changes in v4: > - removed merged patches > - moved marshaller_unref_pipe_item() to red-pipe-item.h instead of > duplicating > the static function in each file. Also renamed from > marshaller_free_pipe_item(). > - renamed marshaller_free_cursor_item() to marshaller_unref_cursor_item() > Merged! Thanks. > Frediano Ziglio (1): > Refactor cursor marshalling for SET, INIT > > Jonathon Jongsma (6): > MainChannel: remove another init_send_data arg > Smartcard: Don't pass pipe item to _init_send_data() > Spicevmc: don't pass pipe item to init_send_data() > DCC: remove more init_send_data() arguments > DCC: change how fill_bits() marshalls data by reference > Remove third argument from red_channel_client_init_send_data() > > server/cursor-channel.c | 44 ++++++---------- > server/dcc-send.c | 102 > ++++++++++++++++++++++-------------- > server/inputs-channel-client.c | 2 +- > server/inputs-channel.c | 6 +-- > server/main-channel-client.c | 36 +++++++------ > server/red-channel-client-private.h | 2 - > server/red-channel-client.c | 26 ++------- > server/red-channel-client.h | 2 +- > server/red-pipe-item.c | 6 +++ > server/red-pipe-item.h | 4 ++ > server/smartcard-channel-client.c | 8 ++- > server/smartcard.c | 2 +- > server/spicevmc.c | 14 ++--- > 13 files changed, 133 insertions(+), 121 deletions(-) > Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel