Am 03.04.2014 10:46, schrieb Stefan Hajnoczi:
> On Wed, Apr 02, 2014 at 04:57:48PM +0200, Andreas Färber wrote:
>> +int main(int argc, char **argv)
>> +{
>> +    QTestState *s1, *s2;
>> +    char *cmd;
>> +    int ret;
>> +
>> +    g_test_init(&argc, &argv, NULL);
>> +    qtest_add_func("/ivshmem/nop", nop);
>> +
>> +    cmd = g_strdup_printf("-device ivshmem,shm=%s,size=1M", "qtest");
> 
> This test leaks the "qtest" shm object that gets created by the first
> QEMU process.  The name is constant so two instances of the test cannot
> run in parallel on the same machine (the objects go in /dev/shm).

Right. Therefore it's already using %s and not a fully hardcoded string.

> The name should be unique and we should clean up in both success and
> failure (abort(3)) cases.

The recipe for unique filenames elsewhere is mkstemp(), which I was
planning to use here as well using "/dev/shm/qtest.XXXXXX" and then to
somehow strip the /dev/shm/ part, e.g. &...[9].

However I do not see any existing test specially cleaning up such
temporary files on SIGABRT rather than just on success. Do you have a
pointer or suggestion how to do that?

Still the actual question of this RFC is, how do I detect whether we may
run this test at all?

1) Relying on being run in the build directory, we could try to peek at
$arch-softmmu/config-target.mak, looking for CONFIG_KVM. Ugly.

2) Determine via QMP whether KVM is available in the QEMU binary. How?
Involves an additional process before launching the actual process with
-device ivshmem.

3) Determine via QMP whether the device QOM type is available in the
QEMU binary. Involves an additional process.

4) Make ivshmem build independent of CONFIG_KVM. Too much work for a
single out of many test cases.

5) ???

Thanks,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

Reply via email to