[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net
|
From: |
Roman Bolshakov |
|
Subject: |
Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net |
|
Date: |
Sun, 30 Jan 2022 00:03:36 +0300 |
On Tue, Jan 25, 2022 at 01:14:27PM +0900, Akihiko Odaki wrote:
> On Tue, Jan 25, 2022 at 8:00 AM Roman Bolshakov <roman@roolebo.dev> wrote:
> >
> > On Mon, Jan 24, 2022 at 08:14:31PM +0000, Peter Maydell wrote:
> > > On Mon, 24 Jan 2022 at 17:49, Roman Bolshakov <roman@roolebo.dev> wrote:
> > > > I'm not sure why blocks are Objective-C specific. All the data I have
> > > > shows the opposite [3][4][5]. They're just extensively used in Apple
> > > > APIs.
> > >
> > > This is true, but for the purposes of our build machinery it is
> > > simpler to have three types of source files that it deals
> > > with (C, C++, ObjC) rather than four (C, C++, ObjC, C-that-uses-blocks).
> > > So unless there's a clear benefit from adding the extra category
> > > I think we should do the simple thing and keep these files named
> > > with a ".m" extension.
> > >
> >
> > Fine by me as long as majority finds it's simpler :) Perhaps it's just a
> > matter of personal preference.
> >
> > I've used to the fact that platform-specific code uses platform-specific
> > extensions or some sort of weird "GCC attributes". Therefore C with an
> > extension is easier to reason for me than Objective-C with ARC and other
> > kinds of implicit behaviour without an actual Objective-C code.
> >
>
> Being technically pedantic, actually this vmnet implementation uses
> Objective-C and there is a file with .c which uses blocks.
> If a file is named .m, dispatch_retain(o) will be redefined as [o
> retain], and effectively makes it Objective-C code. Therefore, vmnet
> involves Objective-C as long as its files are named .m. It will be C
> with blocks if they are named .c.
> Speaking of use of blocks, actually audio/coreaudio.c involves blocks
> in header files; Core Audio has functions which accept blocks.
>
Right, dispatch_retain()/dispatch_release() is just one example of the
implicit behaviour I'm talking about.
> I'm neutral about the decision.
> I think QEMU should avoid using Objective-C code except for
> interactions with Apple's APIs, and .c is superior in terms of that as
> it would prevent accidental introduction of Objective-C code.
That was exactly my point :)
> On the other hand, naming them .m will allow the
> introduction of Automatic Reference Counting to manage dispatch queue
> objects.
As of now ARC doesn't work automatically for .m files in QEMU. It
happens because QEMU doesn't enable it via -fobjc-arc.
If you try to enable it, Cocoa UI won't compile at all because of many
errors like this one and similar ones:
../ui/cocoa.m:1186:12: error: ARC forbids explicit message send of
'dealloc'
[super dealloc];
~~~~~ ^
> In fact, I have found a few memory leaks in vmnet in the last
> review and ui/cocoa.m has a suspicious construction of the object
> management (Particularly it has asynchronous dispatches wrapped with
> NSAutoreleasePool, which does not make sense).
> Introduction of Automatic Reference Counting would greatly help
> addressing those issues, but that would require significant rewriting
> of ui/cocoa.m.
Agreed.
Thanks,
Roman
P.S. I still think that given the mentioned facts and implicitness
introduced by Objective-C it would be more natural to have C code in
macOS-related device backends like vmnet and coreaudio unless
Objective-C is essential and required (like in UI code).
> Personally I'm concerned with ui/cocoa.m and do want to do that
> rewriting, but I'm being busy so it would not happen anytime soon.
>
> Regards,
> Akihiko Odaki
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, (continued)
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Roman Bolshakov, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Christian Schoenebeck, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Roman Bolshakov, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Christian Schoenebeck, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Peter Maydell, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Roman Bolshakov, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Akihiko Odaki, 2022/01/24
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Peter Maydell, 2022/01/25
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Akihiko Odaki, 2022/01/25
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net, Christian Schoenebeck, 2022/01/25
- Re: [PATCH v13 2/7] net/vmnet: add vmnet backends to qapi/net,
Roman Bolshakov <=
[PATCH v13 3/7] net/vmnet: implement shared mode (vmnet-shared), Vladislav Yaroshchuk, 2022/01/13
[PATCH v13 4/7] net/vmnet: implement host mode (vmnet-host), Vladislav Yaroshchuk, 2022/01/13
[PATCH v13 5/7] net/vmnet: implement bridged mode (vmnet-bridged), Vladislav Yaroshchuk, 2022/01/13
[PATCH v13 6/7] net/vmnet: update qemu-options.hx, Vladislav Yaroshchuk, 2022/01/13
[PATCH v13 7/7] net/vmnet: update MAINTAINERS list, Vladislav Yaroshchuk, 2022/01/13