/[packages]/cauldron/libreoffice/current/SOURCES/0001-rhbz-1184582-At-least-catch-and-log-UNO-exceptions-i.patch
ViewVC logotype

Contents of /cauldron/libreoffice/current/SOURCES/0001-rhbz-1184582-At-least-catch-and-log-UNO-exceptions-i.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 812201 - (show annotations) (download)
Sun Jan 25 19:29:15 2015 UTC (8 years, 8 months ago) by tv
File size: 8735 byte(s)
- sync with FC now they updated to 4.4.0 rc3 too plus:
  o move officehelper.py to pyuno package so it can be imported from python
  o add Provides: libreoffice-headless; packages are depending on it
 
1 From dae6572c54a952d9da94261852496dc72fe51d92 Mon Sep 17 00:00:00 2001
2 From: Stephan Bergmann <sbergman@redhat.com>
3 Date: Thu, 22 Jan 2015 12:47:29 +0100
4 Subject: [PATCH] rhbz#1184582: At least catch and log UNO exceptions in
5 grammar checking thread
6
7 (cherry picked from commit b1dbc511eeaf88e3b4b5a8a2dce129d251d2dcb6)
8 Conflicts:
9 linguistic/source/gciterator.cxx
10
11 Change-Id: I87744f86d1413973709a46a58ebc03a39bce842c
12 ---
13 linguistic/source/gciterator.cxx | 110 +++++++++++++++++++++------------------
14 1 file changed, 60 insertions(+), 50 deletions(-)
15
16 diff --git a/linguistic/source/gciterator.cxx b/linguistic/source/gciterator.cxx
17 index 41018e3..d3759eb 100644
18 --- a/linguistic/source/gciterator.cxx
19 +++ b/linguistic/source/gciterator.cxx
20 @@ -545,70 +545,80 @@ void GrammarCheckingIterator::DequeueAndCheck()
21
22 if (xFlatPara.is() && xFPIterator.is())
23 {
24 - OUString aCurTxt( xFlatPara->getText() );
25 - lang::Locale aCurLocale = lcl_GetPrimaryLanguageOfSentence( xFlatPara, aFPEntryItem.m_nStartIndex );
26 -
27 - bModified = xFlatPara->isModified();
28 - if (!bModified)
29 + try
30 {
31 - // ---- THREAD SAFE START ----
32 - ::osl::ClearableGuard< ::osl::Mutex > aGuard( MyMutex::get() );
33 + OUString aCurTxt( xFlatPara->getText() );
34 + lang::Locale aCurLocale = lcl_GetPrimaryLanguageOfSentence( xFlatPara, aFPEntryItem.m_nStartIndex );
35
36 - sal_Int32 nStartPos = aFPEntryItem.m_nStartIndex;
37 - sal_Int32 nSuggestedEnd = GetSuggestedEndOfSentence( aCurTxt, nStartPos, aCurLocale );
38 - DBG_ASSERT( (nSuggestedEnd == 0 && aCurTxt.isEmpty()) || nSuggestedEnd > nStartPos,
39 - "nSuggestedEndOfSentencePos calculation failed?" );
40 + bModified = xFlatPara->isModified();
41 + if (!bModified)
42 + {
43 + // ---- THREAD SAFE START ----
44 + ::osl::ClearableGuard< ::osl::Mutex > aGuard( MyMutex::get() );
45
46 - linguistic2::ProofreadingResult aRes;
47 + sal_Int32 nStartPos = aFPEntryItem.m_nStartIndex;
48 + sal_Int32 nSuggestedEnd = GetSuggestedEndOfSentence( aCurTxt, nStartPos, aCurLocale );
49 + DBG_ASSERT( (nSuggestedEnd == 0 && aCurTxt.isEmpty()) || nSuggestedEnd > nStartPos,
50 + "nSuggestedEndOfSentencePos calculation failed?" );
51
52 - uno::Reference< linguistic2::XProofreader > xGC( GetGrammarChecker( aCurLocale ), uno::UNO_QUERY );
53 - if (xGC.is())
54 - {
55 - aGuard.clear();
56 - uno::Sequence<beans::PropertyValue> const aProps(
57 + linguistic2::ProofreadingResult aRes;
58 +
59 + uno::Reference< linguistic2::XProofreader > xGC( GetGrammarChecker( aCurLocale ), uno::UNO_QUERY );
60 + if (xGC.is())
61 + {
62 + aGuard.clear();
63 + uno::Sequence<beans::PropertyValue> const aProps(
64 lcl_makeProperties(xFlatPara));
65 - aRes = xGC->doProofreading( aCurDocId, aCurTxt,
66 - aCurLocale, nStartPos, nSuggestedEnd, aProps );
67 -
68 - //!! work-around to prevent looping if the grammar checker
69 - //!! failed to properly identify the sentence end
70 - if (
71 - aRes.nBehindEndOfSentencePosition <= nStartPos &&
72 - aRes.nBehindEndOfSentencePosition != nSuggestedEnd
73 - )
74 + aRes = xGC->doProofreading( aCurDocId, aCurTxt,
75 + aCurLocale, nStartPos, nSuggestedEnd, aProps );
76 +
77 + //!! work-around to prevent looping if the grammar checker
78 + //!! failed to properly identify the sentence end
79 + if (
80 + aRes.nBehindEndOfSentencePosition <= nStartPos &&
81 + aRes.nBehindEndOfSentencePosition != nSuggestedEnd
82 + )
83 + {
84 + DBG_ASSERT( false, "!! Grammarchecker failed to provide end of sentence !!" );
85 + aRes.nBehindEndOfSentencePosition = nSuggestedEnd;
86 + }
87 +
88 + aRes.xFlatParagraph = xFlatPara;
89 + aRes.nStartOfSentencePosition = nStartPos;
90 + }
91 + else
92 {
93 - DBG_ASSERT( false, "!! Grammarchecker failed to provide end of sentence !!" );
94 - aRes.nBehindEndOfSentencePosition = nSuggestedEnd;
95 + // no grammar checker -> no error
96 + // but we need to provide the data below in order to continue with the next sentence
97 + aRes.aDocumentIdentifier = aCurDocId;
98 + aRes.xFlatParagraph = xFlatPara;
99 + aRes.aText = aCurTxt;
100 + aRes.aLocale = aCurLocale;
101 + aRes.nStartOfSentencePosition = nStartPos;
102 + aRes.nBehindEndOfSentencePosition = nSuggestedEnd;
103 }
104 + aRes.nStartOfNextSentencePosition = lcl_SkipWhiteSpaces( aCurTxt, aRes.nBehindEndOfSentencePosition );
105 + aRes.nBehindEndOfSentencePosition = lcl_BacktraceWhiteSpaces( aCurTxt, aRes.nStartOfNextSentencePosition );
106
107 - aRes.xFlatParagraph = xFlatPara;
108 - aRes.nStartOfSentencePosition = nStartPos;
109 + //guard has to be cleared as ProcessResult calls out of this class
110 + aGuard.clear();
111 + ProcessResult( aRes, xFPIterator, aFPEntryItem.m_bAutomatic );
112 + // ---- THREAD SAFE END ----
113 }
114 else
115 {
116 - // no grammar checker -> no error
117 - // but we need to provide the data below in order to continue with the next sentence
118 - aRes.aDocumentIdentifier = aCurDocId;
119 - aRes.xFlatParagraph = xFlatPara;
120 - aRes.aText = aCurTxt;
121 - aRes.aLocale = aCurLocale;
122 - aRes.nStartOfSentencePosition = nStartPos;
123 - aRes.nBehindEndOfSentencePosition = nSuggestedEnd;
124 + // the paragraph changed meanwhile... (and maybe is still edited)
125 + // thus we simply continue to ask for the next to be checked.
126 + uno::Reference< text::XFlatParagraph > xFlatParaNext( xFPIterator->getNextPara() );
127 + AddEntry( xFPIterator, xFlatParaNext, aCurDocId, 0, aFPEntryItem.m_bAutomatic );
128 }
129 - aRes.nStartOfNextSentencePosition = lcl_SkipWhiteSpaces( aCurTxt, aRes.nBehindEndOfSentencePosition );
130 - aRes.nBehindEndOfSentencePosition = lcl_BacktraceWhiteSpaces( aCurTxt, aRes.nStartOfNextSentencePosition );
131 -
132 - //guard has to be cleared as ProcessResult calls out of this class
133 - aGuard.clear();
134 - ProcessResult( aRes, xFPIterator, aFPEntryItem.m_bAutomatic );
135 - // ---- THREAD SAFE END ----
136 }
137 - else
138 + catch (css::uno::Exception & e)
139 {
140 - // the paragraph changed meanwhile... (and maybe is still edited)
141 - // thus we simply continue to ask for the next to be checked.
142 - uno::Reference< text::XFlatParagraph > xFlatParaNext( xFPIterator->getNextPara() );
143 - AddEntry( xFPIterator, xFlatParaNext, aCurDocId, 0, aFPEntryItem.m_bAutomatic );
144 + SAL_WARN(
145 + "linguistic",
146 + "GrammarCheckingIterator::DequeueAndCheck ignoring UNO"
147 + " exception " << e.Message);
148 }
149 }
150
151 --
152 1.9.3
153

  ViewVC Help
Powered by ViewVC 1.1.28