Skip to content

Progressbar signal handler for SIGWINCH causes system calls to be interrupted #30

@GoogleCodeExporter

Description

@GoogleCodeExporter
What steps will reproduce the problem?

1. Install the latest version of euca2ools 3.0.0 available here: 
https://github.com/eucalyptus/euca2ools/tree/requestbuilder
2. Use the euca-bundle-vol tool (which uses progressbar)
3. Attempt to resize the terminal window during tarball bundling

What is the expected output? What do you see instead?

I expect to see the progressbar resized properly, but instead an IOError 
exception is raised with EINTR, since the write system call is being 
interrupted by the signal handler for SIGWINCH.

Here's the exception output below:

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

tune2fs 1.42.3 (14-May-2012)
  done
Syncing volume contents...  done
euca-bundle-vol: error: Interrupted system call                                 
Exception in thread Thread-2:                     | 718.55 MB  35.40 MB/s ETA:  
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib/python2.7/site-packages/euca2ools-3.0.0_alpha6-py2.7.egg/euca2ools/commands/bundle/bundle.py", line 187, in _add_fileobj_to_tarball
    tarball.close()
  File "/usr/lib64/python2.7/tarfile.py", line 1776, in close
    self.fileobj.write(NUL * (BLOCKSIZE * 2))
  File "/usr/lib64/python2.7/tarfile.py", line 471, in write
    self.__write(s)
  File "/usr/lib64/python2.7/tarfile.py", line 479, in __write
    self.fileobj.write(self.buf[:self.bufsize])
IOError: [Errno 32] Broken pipe

Exception IOError: (32, 'Broken pipe') in <bound method _Stream.__del__ of 
<tarfile._Stream instance at 0x29673f8>> ignored
Bundling image 100% |======================|  10.00 GB 503.30 MB/s Time: 0:00:21
euca-bundle-vol: error: 
[root@i euca2ools]# 


What version of the product are you using? On what operating system?

I'm using progressbar 0.9.8 on CentOS 6.4

Please provide any additional information below.

I've attached a patch that fixes the issue. After installing the signal 
handler, progressbar should then set the SA_RESTART flag so that system calls 
are restarted after the signal handler executes.

Original issue reported on code.google.com by mspauldi...@gmail.com on 16 May 2013 at 4:46

Attachments:

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions