Re: [PATCH v2 3/9] kernel-shark: Fix KS_DEFINE_PLUGIN_CONTEXT macro

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

 





On 10.05.21 г. 22:23, Steven Rostedt wrote:
On Mon, 10 May 2021 21:50:57 +0300
Yordan Karadzhov <y.karadz@xxxxxxxxx> wrote:

On 10.05.21 г. 21:25, Steven Rostedt wrote:
On Mon, 10 May 2021 14:53:08 +0300
Yordan Karadzhov <y.karadz@xxxxxxxxx> wrote:
Can you show me how you see this error, because this solution does not make
any sense.

The problem is that some plugins can build from multiple source files.
For example in the case when part of the plugin is written in C and
another part in C++. In those cases we cannot have the functions being
static.

So it's because its a mixture of C and C++ code? And you can't make them
static?

No, this has no direct connection with C++. The static functions are the
same in C++.
It became an issue if you have multiple source files. If this is the
case you have to put the macro in a header file, so that you can use the
functions defined in the macro in all your source files. But this does
not work, because the macro defines some global variables as well. To
solve this I defined second macro to be used only in the header, but
then the functions can't be static.


Still does not make sense. Obviously, I'm missing something to connect the
dots.

Can you show me the error message that you are fixing.

It is not an error message. It is a malfunctioning. Say you have a macro that looks like this:

#define KS_DEFINE_PLUGIN_CONTEXT(type)		\
static type **__context_handler;		\
static ssize_t __n_streams = -1;		\
static inline type *__get_context(int sd)	\
{						\
	if (sd < 0 || sd >= __n_streams)	\
		return NULL;			\
	return __context_handler[sd];		\
}
						\
and you want to use __get_context(int sd) in different source files.
If you just place the macro in a header, each source file will have its own "static __context_handler" variable which is not what I would like.
So this is a malfunctioning.

I can solve this problem by having a second macro that only declares "type *__get_context(int sd)" and place this macro in the header, while keeping the original macro in one of the source files, but then __get_context() cannot be static. If I go this way and I have multiple plugins using the same macro I will have multiple versions of the same function and this time the dynamic linking will start to misbehave.

Does that make sense?

Thanks!
Yordan


Thanks,

-- Steve




[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux