diff --git a/src/calibre/ebooks/lrf/html/convert_from.py b/src/calibre/ebooks/lrf/html/convert_from.py
index 665dbd0119..2ea76137bc 100644
--- a/src/calibre/ebooks/lrf/html/convert_from.py
+++ b/src/calibre/ebooks/lrf/html/convert_from.py
@@ -540,7 +540,7 @@ class HTMLConverter(object, LoggingInterface):
return tb
for page in list(self.book.pages()[index+1:]):
for c in page.contents:
- if isinstance(c, (TextBlock, ImageBlock)):
+ if isinstance(c, (TextBlock, ImageBlock, Canvas)):
return c
raise ConversionError(_('Could not parse file: %s')%self.file_name)
diff --git a/src/calibre/parallel.py b/src/calibre/parallel.py
index b7f3b7bfc0..1f4816b25e 100644
--- a/src/calibre/parallel.py
+++ b/src/calibre/parallel.py
@@ -466,7 +466,9 @@ class Overseer(object):
self.job.update_status(percent, msg)
elif word == 'ERROR':
self.write('OK')
- self.job.excetion, self.job.traceback = cPickle.loads(msg)
+ exception, traceback = cPickle.loads(msg)
+ self.job.output(u'%s\n%s'%(exception, traceback))
+ self.job.exception, self.job.traceback = exception, traceback
return True
else:
self.terminate()
@@ -914,10 +916,11 @@ def worker(host, port):
write(client_socket, 'RESULT:'+ cPickle.dumps(result))
except BaseException, err:
exception = (err.__class__.__name__, unicode(str(err), 'utf-8', 'replace'))
- tb = traceback.format_exc()
+ tb = unicode(traceback.format_exc(), 'utf-8', 'replace')
msg = 'ERROR:'+cPickle.dumps((exception, tb),-1)
write(client_socket, msg)
- if read(client_socket, 10) != 'OK':
+ res = read(client_socket, 10)
+ if res != 'OK':
break
gc.collect()
elif msg == 'PING:':