Re: [OE-core] [PATCH 1/3] runqemu: Allow to store more than one lock for network interfaces

2019-07-01 Thread Anibal Limon
On Sun, 30 Jun 2019 at 06:41,  wrote:

> On Thu, 2019-06-27 at 22:38 -0500, Aníbal Limón wrote:
> > In order to support multiple tap devices in the same qemu virtual
> > machine.
> >
> > Signed-off-by: Aníbal Limón 
> > ---
>
> With this change included tests failed on the autobuilder. I think it
> breaks usage of tap devices after the first one. E.g.:
>
> https://autobuilder.yoctoproject.org/typhoon/#/builders/59/builds/756
>
> (but testimage failed all over)
>

Ok, I will review the issue and send a v2.

Thanks,
Anibal


>
> Cheers,
>
> Richard
>
>
-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


Re: [OE-core] [PATCH 1/3] runqemu: Allow to store more than one lock for network interfaces

2019-06-30 Thread richard . purdie
On Thu, 2019-06-27 at 22:38 -0500, Aníbal Limón wrote:
> In order to support multiple tap devices in the same qemu virtual
> machine.
> 
> Signed-off-by: Aníbal Limón 
> ---

With this change included tests failed on the autobuilder. I think it
breaks usage of tap devices after the first one. E.g.:

https://autobuilder.yoctoproject.org/typhoon/#/builders/59/builds/756

(but testimage failed all over)

Cheers,

Richard

-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


[OE-core] [PATCH 1/3] runqemu: Allow to store more than one lock for network interfaces

2019-06-27 Thread Aníbal Limón
In order to support multiple tap devices in the same qemu virtual
machine.

Signed-off-by: Aníbal Limón 
---
 scripts/runqemu | 48 
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/scripts/runqemu b/scripts/runqemu
index 4079f2b17d..8a54c9ef9a 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -181,8 +181,7 @@ class BaseConfig(object):
 self.audio_enabled = False
 self.tcpserial_portnum = ''
 self.custombiosdir = ''
-self.lock = ''
-self.lock_descriptor = None
+self.lock_descriptors = {}
 self.bitbake_e = ''
 self.snapshot = False
 self.wictypes = ('wic', 'wic.vmdk', 'wic.qcow2', 'wic.vdi')
@@ -204,30 +203,30 @@ class BaseConfig(object):
 # avoid cleanup twice
 self.cleaned = False
 
-def acquire_lock(self, error=True):
-logger.debug("Acquiring lockfile %s..." % self.lock)
+def acquire_lock(self, lock, error=True):
+logger.debug("Acquiring lockfile %s..." % lock)
 try:
-self.lock_descriptor = open(self.lock, 'w')
-fcntl.flock(self.lock_descriptor, fcntl.LOCK_EX|fcntl.LOCK_NB)
+self.lock_descriptors[lock] = open(lock, 'w')
+fcntl.flock(self.lock_descriptors[lock], 
fcntl.LOCK_EX|fcntl.LOCK_NB)
 except Exception as e:
-msg = "Acquiring lockfile %s failed: %s" % (self.lock, e)
+msg = "Acquiring lockfile %s failed: %s" % (lock, e)
 if error:
 logger.error(msg)
 else:
 logger.info(msg)
-if self.lock_descriptor:
-self.lock_descriptor.close()
-self.lock_descriptor = None
+if self.lock_descriptors[lock]:
+self.lock_descriptor[lock].close()
+self.lock_descriptor[lock] = None
 return False
 return True
 
-def release_lock(self):
-if self.lock_descriptor:
-logger.debug("Releasing lockfile for tap device '%s'" % self.tap)
-fcntl.flock(self.lock_descriptor, fcntl.LOCK_UN)
-self.lock_descriptor.close()
-os.remove(self.lock)
-self.lock_descriptor = None
+def release_lock(self, lock):
+if self.lock_descriptors[lock]:
+logger.debug("Releasing lockfile for tap device '%s'" % lock)
+fcntl.flock(self.lock_descriptors[lock], fcntl.LOCK_UN)
+self.lock_descriptors[lock].close()
+os.remove(lock)
+self.lock_descriptors[lock] = None
 
 def get(self, key):
 if key in self.d:
@@ -1016,8 +1015,8 @@ class BaseConfig(object):
 if os.path.exists('%s.skip' % lockfile):
 logger.info('Found %s.skip, skipping %s' % (lockfile, p))
 continue
-self.lock = lockfile + '.lock'
-if self.acquire_lock(error=False):
+lock = lockfile + '.lock'
+if self.acquire_lock(lock, error=False):
 tap = p
 logger.info("Using preconfigured tap device %s" % tap)
 logger.info("If this is not intended, touch %s.skip to make 
runqemu skip %s." %(lockfile, tap))
@@ -1035,8 +1034,8 @@ class BaseConfig(object):
 cmd = ('sudo', self.qemuifup, str(uid), str(gid), 
self.bindir_native)
 tap = subprocess.check_output(cmd).decode('utf-8').strip()
 lockfile = os.path.join(lockdir, tap)
-self.lock = lockfile + '.lock'
-self.acquire_lock()
+lock = lockfile + '.lock'
+self.acquire_lock(lock)
 self.cleantap = True
 logger.debug('Created tap: %s' % tap)
 
@@ -1268,8 +1267,8 @@ class BaseConfig(object):
 cmds = shlex.split(cmd)
 logger.info('Running %s\n' % cmd)
 pass_fds = []
-if self.lock_descriptor:
-pass_fds = [self.lock_descriptor.fileno()]
+if self.lock_descriptors.keys():
+pass_fds = [self.lock_descriptors[lock].fileno() for lock in 
self.lock_descriptors.keys()]
 process = subprocess.Popen(cmds, stderr=subprocess.PIPE, 
pass_fds=pass_fds)
 self.qemupid = process.pid
 retcode = process.wait()
@@ -1291,7 +1290,8 @@ class BaseConfig(object):
 cmd = ('sudo', self.qemuifdown, self.tap, self.bindir_native)
 logger.debug('Running %s' % str(cmd))
 subprocess.check_call(cmd)
-self.release_lock()
+for lock in self.lock_descriptors.keys():
+self.release_lock(lock)
 
 if self.nfs_running:
 logger.info("Shutting down the userspace NFS server...")
-- 
2.20.1

-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core