Summary: | evolution crash to _cairo_gstate_backend_to_user() | ||
---|---|---|---|
Product: | cairo | Reporter: | Sebastien Bacher <seb128> |
Component: | general | Assignee: | Carl Worth <cworth> |
Status: | RESOLVED FIXED | QA Contact: | cairo-bugs mailing list <cairo-bugs> |
Severity: | blocker | ||
Priority: | medium | ||
Version: | 1.3.13 | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Sebastien Bacher
2007-02-07 12:32:45 UTC
(In reply to comment #0) > (gdb) p *cr > $1 = {ref_count = 1, status = CAIRO_STATUS_INVALID_RESTORE, path = {op_buf_head > = 0x886f9f0, op_buf_tail = 0x886f9f0, > arg_buf_head = 0x888e598, arg_buf_tail = 0x888e598, last_move_point = {x = > 31928960, y = 52340096}, current_point = { > x = 31928960, y = 52340096}, has_current_point = 1, has_curve_to = 0}, > gstate = 0x0} This part is very interesting. If you've hit an INVALID_RESTORE case then cairo_t should shut down and you shouldn't be able to get it to do anything after that anymore, (and especially not crash). Could you break on _cairo_error which should show you where the INVALID_RESTORE is first happening, and then step through to see how you're getting from there to the crash? Thanks, -Carl (In reply to comment #1) > Could you break on _cairo_error which should show you where the INVALID_RESTORE > is first happening, and then step through to see how you're getting from there > to the crash? Oh, never mind. It's clear enough from the existing backtrace already. Any INVALID_RESTORE condition was leaving a NULL gstate and almost any cairo_get_* call would dererference that and trigger the crash. I augmented cairo's test suite to exercise the crash, then I fixed the bug. You can see the commit I just pushed out here: http://gitweb.freedesktop.org/?p=cairo;a=commitdiff;h=6da7f140334835be9a972db75de78d99b8bd24b1 This is currently available in cairo 1.3.15 as made available in git, and will be pushed out very shortly in the cairo 1.4 release. Meanwhile, there's still a bug in evolution somewhere that's leading to the INVALID_RESTORE in the first place, (that is, calling cairo_restore without a matching call to cairo_save). This fix will prevent the crash, and will instead replace it with cairo simply refusing to draw anything after the invalid restore state. So you'll still want to fix that. -Carl Thank you for fixing the bug Carl. I didn't update the bug with the informations you asked for because the Ubuntu bug submitter didn't reply to that question, he updated the bug to say it works fine for him now though which means the evolution hackers probably also fixed their part of the bug |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.