The attached code causes an assertion to fail with the following output.

device 0x15ea480
openStatus 1
disk 0x16019c0
diskCommitStatus 1
clobberStatus 1
Backtrace has 5 calls on stack:
  5: /lib64/libparted.so.2(ped_assert+0x53) [0x7f45cfe82633]
  4: /lib64/libparted.so.2(+0x1aa3b) [0x7f45cfe8ba3b]
  3: ./disk(main+0x15c) [0x401392]
  2: /lib64/libc.so.6(__libc_start_main+0xd5) [0x7f45cf94bb75]
  1: ./disk(_start+0x2e) [0x40117e]
A bug has been detected in GNU Parted.  Refer to the web site of parted 
http://www.gnu.org/software/parted/parted.html for more information of what 
could be useful for bug submitting!  Please email a bug report to 
bug-parted@gnu.org containing at least the version (3.4) and the following 
message:  Assertion (!disk->update_mode) at disk.c:481 in function 
ped_disk_commit_to_dev() failed.
Aborted

I would thought expected if a disk cannot be used after a clobber that either 
the ped_disk_commit_to_dev call would return 0.

Also, should the documentation for ped_disk_clobber state that no use of 
pre-existing disks should be made after clobber has been called, and that there 
is no need to commit the change as it as they appear to be committed to disk by 
the call to clobber.

Ian Ormshaw, PhD
Principal Software Engineer
[cid:image001.png@01D77493.4F76CFC0]

[T] +44 (0)161 946 2596
[W] www.waters.com<http://www.waters.com/>
[E] ian_orms...@waters.com<mailto:ian_orms...@waters.com>
Waters Limited
Stamford Avenue
Altrincham Road
Wilmslow
SK9 4AX
UK
[cid:image003.png@01D77493.4F76CFC0]<http://www.twitter.com/@WatersCorp>[cid:image007.png@01D77493.4F76CFC0]<http://www.linkedin.com/companies/waters>[cid:image008.png@01D77493.4F76CFC0]<http://www.facebook.com/Waters>[cid:image003.png@01D77493.4F76CFC0]<http://www.youtube.com/user/WatersCorporation>

Waters Limited is registered in England under No 2912366.
Registered office: 11 Old Jewry, London, EC2R 8DU, UK

======================================================================
The information in this email is confidential, and is intended solely for the 
addressee(s). Access to this email by anyone else is unauthorized and therefore 
prohibited. If you are not the intended recipient you are notified that 
disclosing, copying, distributing or taking any action in reliance on the 
contents of this information is strictly prohibited and may be unlawful.
#include <iostream>

#include <parted/parted.h>

#define TRIGGER_BUG

int main(int argc, char **argv)
{
    const char* devicePath{"/dev/sdf"};

    PedDevice* device = ped_device_get(devicePath);

    std::cout << "device " << device << std::endl;

    int openStatus{ped_device_open(device)};

    std::cout << "openStatus " << openStatus << std::endl;

#if defined(TRIGGER_BUG)
    PedDisk* disk{ped_disk_new(device)};

    std::cout << "disk " << disk << std::endl;

    int diskCommitStatus{ped_disk_commit(disk)};

    std::cout << "diskCommitStatus " << diskCommitStatus << std::endl;

    ped_disk_destroy(disk);
#endif // defined(TRIGGER_BUG)

    int clobberStatus{ped_disk_clobber(device)};

     std::cout << "clobberStatus " << clobberStatus << std::endl;

#if defined(TRIGGER_BUG)
    int diskCommitToDeviceStatus{ped_disk_commit_to_dev(disk)};

    std::cout << "diskCommitToDeviceStatus " << diskCommitToDeviceStatus << 
std::endl;

    int diskCommitToOsStatus{ped_disk_commit_to_os(disk)};

    std::cout << "diskCommitToOsStatus " << diskCommitToOsStatus << std::endl;
#endif // defined(TRIGGER_BUG)

    int closeStatus{ped_device_close(device)};

    std::cout << "closeStatus " << closeStatus << std::endl;

    ped_device_destroy(device);

    return 0;
}

Reply via email to