@@ -69,49 +69,51 @@ static private JSONObject generateJsonDiff(JSONObject cur, JSONObject changedTo,
69
69
else
70
70
output = new JSONObject ();
71
71
72
- while (keys .hasNext ()) {
73
- try {
74
- key = keys .next ();
75
- value = changedTo .get (key );
76
-
77
- if (cur .has (key )) {
78
- if (value instanceof JSONObject ) {
79
- JSONObject curValue = cur .getJSONObject (key );
80
- JSONObject outValue = null ;
81
- if (baseOutput != null && baseOutput .has (key ))
82
- outValue = baseOutput .getJSONObject (key );
83
- JSONObject returnedJson = generateJsonDiff (curValue , (JSONObject ) value , outValue , includeFields );
84
- String returnedJsonStr = returnedJson .toString ();
85
- if (!returnedJsonStr .equals ("{}" ))
86
- output .put (key , new JSONObject (returnedJsonStr ));
87
- }
88
- else if (value instanceof JSONArray )
89
- handleJsonArray (key , (JSONArray ) value , cur .getJSONArray (key ), output );
90
- else if (includeFields != null && includeFields .contains (key ))
91
- output .put (key , value );
92
- else {
93
- Object curValue = cur .get (key );
94
- if (!value .equals (curValue )) {
95
- // Work around for JSON serializer turning doubles/floats into ints since it drops ending 0's
96
- if (curValue instanceof Integer && !"" .equals (value )) {
97
- if ( ((Number )curValue ).doubleValue () != ((Number )value ).doubleValue ())
72
+ synchronized (cur ) {
73
+ while (keys .hasNext ()) {
74
+ try {
75
+ key = keys .next ();
76
+ value = changedTo .get (key );
77
+
78
+ if (cur .has (key )) {
79
+ if (value instanceof JSONObject ) {
80
+ JSONObject curValue = cur .getJSONObject (key );
81
+ JSONObject outValue = null ;
82
+ if (baseOutput != null && baseOutput .has (key ))
83
+ outValue = baseOutput .getJSONObject (key );
84
+ JSONObject returnedJson = generateJsonDiff (curValue , (JSONObject ) value , outValue , includeFields );
85
+ String returnedJsonStr = returnedJson .toString ();
86
+ if (!returnedJsonStr .equals ("{}" ))
87
+ output .put (key , new JSONObject (returnedJsonStr ));
88
+ }
89
+ else if (value instanceof JSONArray )
90
+ handleJsonArray (key , (JSONArray ) value , cur .getJSONArray (key ), output );
91
+ else if (includeFields != null && includeFields .contains (key ))
92
+ output .put (key , value );
93
+ else {
94
+ Object curValue = cur .get (key );
95
+ if (!value .equals (curValue )) {
96
+ // Work around for JSON serializer turning doubles/floats into ints since it drops ending 0's
97
+ if (curValue instanceof Integer && !"" .equals (value )) {
98
+ if ( ((Number )curValue ).doubleValue () != ((Number )value ).doubleValue ())
99
+ output .put (key , value );
100
+ }
101
+ else
98
102
output .put (key , value );
99
103
}
100
- else
101
- output .put (key , value );
102
104
}
103
105
}
106
+ else {
107
+ if (value instanceof JSONObject )
108
+ output .put (key , new JSONObject (value .toString ()));
109
+ else if (value instanceof JSONArray )
110
+ handleJsonArray (key , (JSONArray ) value , null , output );
111
+ else
112
+ output .put (key , value );
113
+ }
114
+ } catch (JSONException e ) {
115
+ e .printStackTrace ();
104
116
}
105
- else {
106
- if (value instanceof JSONObject )
107
- output .put (key , new JSONObject (value .toString ()));
108
- else if (value instanceof JSONArray )
109
- handleJsonArray (key , (JSONArray )value , null , output );
110
- else
111
- output .put (key , value );
112
- }
113
- } catch (JSONException e ) {
114
- e .printStackTrace ();
115
117
}
116
118
}
117
119
@@ -165,22 +167,24 @@ private static JSONObject getTagsWithoutDeletedKeys(JSONObject jsonObject) {
165
167
if (jsonObject .has ("tags" )) {
166
168
JSONObject toReturn = new JSONObject ();
167
169
168
- JSONObject keyValues = jsonObject .optJSONObject ("tags" );
170
+ synchronized (jsonObject ) {
171
+ JSONObject keyValues = jsonObject .optJSONObject ("tags" );
169
172
170
- Iterator <String > keys = keyValues .keys ();
171
- String key ;
172
- Object value ;
173
+ Iterator <String > keys = keyValues .keys ();
174
+ String key ;
175
+ Object value ;
173
176
174
- while (keys .hasNext ()) {
175
- key = keys .next ();
176
- try {
177
- value = keyValues .get (key );
178
- if (!"" .equals (value ))
179
- toReturn .put (key , value );
180
- } catch (Throwable t ) {}
181
- }
177
+ while (keys .hasNext ()) {
178
+ key = keys .next ();
179
+ try {
180
+ value = keyValues .get (key );
181
+ if (!"" .equals (value ))
182
+ toReturn .put (key , value );
183
+ } catch (Throwable t ) {}
184
+ }
182
185
183
- return toReturn ;
186
+ return toReturn ;
187
+ }
184
188
}
185
189
186
190
return null ;
0 commit comments