[Top][All Lists]

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

Re: [parted] ped_partition_busy should not call the libparted exception

From: Jim Meyering
Subject: Re: [parted] ped_partition_busy should not call the libparted exception handler
Date: Tue, 06 Oct 2009 11:46:23 +0200

Hans de Goede wrote:
Thanks.  The patch is fine.
Good timing.  If I'm lucky, I'll make an upstream beta release today.

I've adjusted the log to keep line lengths < 72 and fixed
a space-before-TAB warning in the code.
Also, thanks for the BZ URL.  I've used a shortened and http (not https)
version of it.

I'll mention this fix in NEWS separately.

>From 66fd2c47599de18b354de21ce7a505ca2abb0f56 Mon Sep 17 00:00:00 2001
From: Hans de Goede <address@hidden>
Date: Tue, 6 Oct 2009 11:31:14 +0200
Subject: [PATCH] ped_partition_busy: do not call the libparted exception handler

Modify libparted/arch/linux.c _partition_get_part_dev() to not call
_device_stat() but instead use stat directly, as _device_stat() calls
the libparted exception handler, and we don't want this here, the only
caller of _partition_get_part_dev() is _partition_is_mounted(), which
in turn only gets called by linux_partition_is_busy(), and we don't
want to "throw" exceptions from ped_partition_busy().

This issue was noticed in combination with pyparted as used by
anaconda, see: http://bugzilla.redhat.com/527035#c10
 libparted/arch/linux.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index 52f7d21..6a3c6b3 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -2127,7 +2127,7 @@ _partition_get_part_dev (const PedPartition* part)
         struct stat dev_stat;
         int dev_major, dev_minor;

-        if (!_device_stat (part->disk->dev, &dev_stat))
+        if (stat (part->disk->dev->path, &dev_stat))
                 return (dev_t)0;
         dev_major = major (dev_stat.st_rdev);
         dev_minor = minor (dev_stat.st_rdev);
@@ -2184,6 +2184,8 @@ _partition_is_mounted (const PedPartition *part)
         if (!ped_partition_is_active (part))
                 return 0;
         dev = _partition_get_part_dev (part);
+        if (!dev)
+                return 0;
         return _partition_is_mounted_by_dev (dev);


reply via email to

[Prev in Thread] Current Thread [Next in Thread]