[Spice-devel] Review of the C++ patches
Kevin Pouget
kpouget at redhat.com
Mon Jun 8 15:12:25 UTC 2020
commit 75679dc95d450173319f462b25f267cb3025778f
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Wed Apr 1 20:43:04 2020 +0100
dispatcher: Use IS-A relationship for Dispatcher hierarchy
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch adds class inheritance to the `Dispatcher` to avoid the
usage of the `parent` attribute. Surprisingly, there is no related
update of the code.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 164a333f991f09452844a94ad84a3190a2b6149d
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Wed Apr 1 20:50:44 2020 +0100
Define and use (un)ref
Avoids g_object_(un)ref.
This in preparation to remove GObject.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch updates the `Dispatcher` class to add `ref`/`unref`
methods, and updates the code accordingly.
The `RedClient` definition is moved from `red-client.cpp` to
`red-client.h` and now inherits from `GObject` instead of having it as
a parent. It's not very clear why the definition was moved as the
patch removes references to it.
Minor: the commit message could have been prefixed with 'dispatch'
and/or split another way.
Besides that, the code looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit f680cc7870143beb61de6094728667a34e6083ca
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu May 23 11:47:39 2019 +0100
dispatcher: Add a more safe dispatcher_send_message_custom version
Use a template to wrap the other dispatcher_send_message_custom
avoiding having to pass a void* opaque and extract payload size
from passed type.
Will be used more by next commit when Dispatchers are turned into
C++.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch adds a safer dispatcher_send_message_custom method,
which overrides and calls the existing one.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit f4aefa728ed6c2bd37ca6d404703b041c0938f60
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu Mar 5 08:27:57 2020 +0000
Remove GObject from Dispatcher hierarchy
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Big patch so not easy to review. Overall, it turns the dispatcher into
C++ classes and updates the code accordingly.
Looks good to me, but I didn't look at it in depth.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 43c6bf91b7c53ee9f93f7ea1cead5bba94c61f88
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu Mar 5 13:01:27 2020 +0000
reds: Remove a weak pointer usage
RedCharDevice can all be removed just calling unref, beside
the agent that needs special threatment.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
The logic of the code before/after the patch is not fully clear to me.
I understand that the clean-up of `RedCharDevice`-based objects is
simplified thanks to inheritance (`smartcard_device_disconnect` and
`spicevmc_device_disconnect`'s behavior is now identical, so the
cleanup is done in `reds_remove_char_device`.
Seems fine to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit cc86a7fb53cf9eb1b65c4feee26af94ed5a01714
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu Mar 5 10:17:38 2020 +0000
red-client: Automatically convert functions to methods
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch converts C functions to C++ methods, and updates the code
accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit fef97b14e50b550c6148482b4b8049c3f6ba96ae
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu Mar 5 10:21:43 2020 +0000
red-client: Make RedClient pure C++
Remove GObject.
Add access protection.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch turns the `RedClient` into an object, and removes GObject
usage.
Seems fine to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 9fd105e925e09be021a8d65f8795a8fe8de384e7
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Tue Mar 17 18:56:02 2020 +0000
main-channel: Automatic convert functions to methods
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch converts C functions to C++ methods, and updates the code
accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit ab7486a9e8667160390811abc677dfdc5ee33028
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Tue Mar 17 19:11:18 2020 +0000
main-channel-client: Automatically convert
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch converts C functions to C++ methods, and updates the code
accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 350646608dd8e2283e47d32b7487915b2f49ddc2
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sat Jun 1 00:46:19 2019 +0100
red-channel: Small simplification
Use std::max to make code smaller
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Simple code simplification, looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit fe0298a2905121a02ee64f429e9f88148d17c6ee
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 04:03:24 2020 +0000
safe-list: Add a class to implement a list with safe iterators
The reason to not using STL is that our code from how was designed requires
the iterator to be safe to the delete of the element pointed by the iterator.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch defines a `safe_list` class. As far as I understand (and as
the name/commit/comments suggest), this class allows the deletion of
the current iterator, while traversing the list.
/* Implementation of a list with more "safe" iterators.
* Specifically the item under an iterator can be removed while scanning
* the list. This to allow objects in the list to delete themselves from
* the list.
*/
I'm not a C++ export, but what I can read looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 767a9caded058fbde64fa4cc8e719c6ccef5f707
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 04:13:00 2020 +0000
Allow to compile without C++ library
Provide a suitable allocator using GLib
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch defines a class-wrapper `Mallocator` around GLib
`g_malloc/g_free` functions. This class is used with the `safe_list`
class. The `==` and `!=` operators of the class are defined to return
`true` / `false`, respectively.
The purpose of this class and the operator overloading is unclear to
me, but what I can read looks good.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit ec66702526fc4d5f046f5ef35d2751a90b16c14e
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Tue Mar 10 10:13:02 2020 +0000
reds: Use red::safe_list instead of GList
Use an utility list.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch turns `GList *` into `red::safe_list<T>` lists and updates
the code accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 4233df686eb2e18f47e05f541e83eee66ddd8273
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 04:40:11 2020 +0000
reds: Move clients to safe_list
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch turns `GList *` into `red::safe_list<T>` lists and updates
the code accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 2b11c917dc9bced674304384b01e26506098fd06
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu Feb 6 21:38:51 2020 +0000
Do not use GError to just return an error string
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch replaces `GError *` by `char *` for returning simple string
error messages.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 26e6d1555162a09937e2c8c910fbee631dcdf53c
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Thu Mar 5 18:45:17 2020 +0000
char-device: Prepare to move functions to methods
Move structure declaration at the end.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch moves a structure declaration from the upper part of the
file to the bottom.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 5f7aaf2a9a133f90869a453d3b00ccd97383dbb7
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 06:47:57 2020 +0000
char-device: Remove define trick, won't work on C++
C++ check parameter type, not founding the functions at
link time.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch removes a "trick" that was used to deal with opaque types.
I didn't understand exactly what is all behind it, but the new code is
definitely clearer and less mysterious.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 1411383483e2b948db022ebfbcbf630852f2c5f6
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Tue Mar 10 10:30:27 2020 +0000
char-device: Automatically convert functions to methods
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch converts C functions to C++ methods, and updates the code
accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 454b18fcae80f021c67c6148ac84ee515c903032
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 10:12:22 2020 +0000
char-device: Convert some static functions to methods
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch converts C functions to C++ methods, and updates the code
accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 9dcf937767b009b9b0e1bef6c0d6a3bb6dc657c2
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 18:40:51 2020 +0000
reds: Move qxl_instances to red::safe_list
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch turns `GList *` into `red::safe_list<T>` lists and updates
the code accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit b28db35af51dfff5984ffab42a09256732391427
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sat Mar 7 10:01:42 2020 +0000
reds: Make mig_wait_disconnect_clients a std::forward_list
In the meanwhile remove a leak on the program.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch turns `GList *` into `red::forward_list<T>` lists and
updates the code accordingly.
I guess that the leak is related to this hunk:
-g_list_free(reds->mig_wait_disconnect_clients);
+reds->mig_wait_disconnect_clients.clear();
as `g_list_free` doesn't release the memory of dynamically allocated
objects. I didn't look further to confirm this guess.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 54c083091943f61a8ebe0b4d420c3311c37df3e6
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sun Mar 8 18:54:23 2020 +0000
input-channels: Improve encapsulation
Update member access to limit it.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch changes the visibility of multiple methods.
Seems safe to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit bf04d7d721c939c058bb17d72c5d68a51ffe8b19
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 18:49:46 2020 +0000
utils: Very skinny share_ptr implementation for our references
It will be used to refactor reference counting code.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch defines a `share_ptr` class.
Minor: `s/inspired to/inspired from` (or similar to...)
I'm not a C++ expert but this seems safe to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 5126e383670db631c5546fa5677f79982bfe8246
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Fri Mar 6 20:23:42 2020 +0000
Use shared_ptr implementation to handle reference counting
This allows to make easier the management of owning.
Reference counting is automatically updated based on shared
pointers modification.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch replaces the `ref`/`unref` reference counting by the
`share_ptr` wrapping, as defined in the previous patch.
I didn't study in details how this works, but seems good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 597461e443962fa0294794b1db3d2f1c0fb18812
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sun Mar 8 05:46:56 2020 +0000
Add and use red::make_shared
Allow to create an object already contained in a shared pointer
to avoid having not owned objects.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch uses more `share_ptr` pointer wrappers.
Minor: seems that some TODOs are left in the code:
// XXX make_shared
Seems good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 724f23e4bd9ce59279b5731f8bf4962b6f1d9acc
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sat Mar 7 12:22:22 2020 +0000
Use red::shared_ptr_counted for RedChannelClient
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch adds more usage of `make_shared`/`share_ptr` (minor: could
have been mentioned in the commit message).
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 2b9e1dcd5509dd2931e070f397adf5d2abcfa005
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Mon Mar 9 02:25:03 2020 +0000
dispatcher: Reuse base reference counting for Dispatcher hierararchy
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Minor: `s/hierararchy/hierarchy` in the commit message.
This patch continues the transition to using more `shared_ptr`.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit be5bda4d4f1a6c348e45694143228965bda718b7
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sat Mar 7 11:26:13 2020 +0000
utils: Add red::weak_ptr and red::shared_ptr_counted_weak
Implements weak pointers and helper to implement them.
They will be used for RedCharDevice.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch implements `weak_ptr` and `shared_ptr_counted_weak`
classes.
I didn't look at it.
commit f6f998004bc586ec0afdc550f0bdeb026d2dcd29
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sun Mar 8 12:51:07 2020 +0000
Wrap spice.h in order to do some adjustment
Instead of including spice.h directly include an header that wraps
it. This allows to remove the SPICE_SERVER_INTERNAL define.
Currently is used to rename SpiceCharDeviceInstance to RedCharDevice
and reduce its visibility to hidden. This remove some warnings
and some weird code in the source.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch removes naming tricks from the code.
I could not understand all of it, but it seems safe.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 1e9205a3b8b0a1c63bd81418f570e0b2ee16c0b2
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sat Mar 7 22:11:34 2020 +0000
char-device: Remove GObject from RedCharDevice
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Big patch, I didn't look at it.
commit fd06625ba165d247be97058dc607e44bd128d5f7
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sun Mar 15 07:02:42 2020 +0000
red-stream-device: Better encapsulation
Remove all members public, set correct access and create
missing methods.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch converts C functions to C++ methods, and updates the code
accordingly.
Looks good to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 31f0ce20867ecd4c07a2d5e20135cd188704e77e
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Tue Mar 10 08:23:14 2020 +0000
Avoids registering type just to get the nick of an enum value
We don't use anymore GObject parameters so avoid having to
register enum values to GType system to use them.
We just need to get the nick value of the enum values for
debug purposes.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
I don't know how these nicks / templates work, I didn't try to
understand the patch.
commit 46cda65123a09187e69b0cd5ee5cc4d0064670cf
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Sun Mar 8 10:52:53 2020 +0000
build: Remove GObject dependency
Not used anymore.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch removes GObjects from the meson and autotools build
systems.
It also removes unused GObject helper macros/inline functions.
Seems safe to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 851b136bb4881a0bfa6838ba03c8e7a491b17b2e
Author: Frediano Ziglio <fziglio at redhat.com>
Date: Tue Mar 10 16:32:51 2020 +0000
sound: Make functions exported not visible
Allows the compiler to do some additional optimizations.
Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
This patch changes the visibility of the functions definied in the
`sound.h` header.
Seems safe to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
commit 62801ad9acfc61280dfa32b767b7915eaed7ff24
Author: Frediano Ziglio <freddy77 at gmail.com>
Date: Tue May 5 05:08:37 2020 +0100
char-device: Remove obsolete declaration
Signed-off-by: Frediano Ziglio <freddy77 at gmail.com>
This patch removes an unused `struct` forward declaration.
Seems safe to me.
Acked-by: Kevin Pouget <kpouget at redhat.com>
On Mon, Jun 8, 2020 at 5:10 PM Kevin Pouget <kpouget at redhat.com> wrote:
>
> Hello spice-devel
>
> I worked on the review of Frediano's C++ patches during the last weeks,
> I tried to understand the gist of the commits and summarize it in the review message.
> It's not an in-depth review, and I only spotted minor details.
>
> A few patches are not acked, mostly because they were too big for me to study carefully enough.
>
> Overall, I really appreciate the effort made to adapt the code to C++, from my point of view it is greatly beneficial for the code as it reduces a lot the amount of code duplication (boilerplate code) by leveraging C++ inheritance, polymorphism, virtual methods, etc.
> Likewise, the ref-counting is made simpler and safer with custom classes (share_ptr). These custom classes mimic existing ones AFAICT, but they are more "C-safe" as they cannot throw exceptions.
>
> 3 mails will follow with the reviews.
>
> Best regards,
>
> Kevin
More information about the Spice-devel
mailing list