1 /* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is also distributed with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software Foundation,
21 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
22
23 #include <my_global.h>
24 #include <my_pthread.h>
25 #include <pfs_instr.h>
26 #include <pfs_stat.h>
27 #include <pfs_global.h>
28 #include <pfs_instr_class.h>
29 #include <tap.h>
30
31 #include "stub_pfs_global.h"
32
33 #include <string.h> /* memset */
34
test_oom()35 void test_oom()
36 {
37 int rc;
38 PFS_global_param param;
39
40 stub_alloc_always_fails= true;
41
42 memset(& param, 0xFF, sizeof(param));
43 param.m_enabled= true;
44 param.m_mutex_class_sizing= 10;
45 param.m_rwlock_class_sizing= 0;
46 param.m_cond_class_sizing= 0;
47 param.m_thread_class_sizing= 0;
48 param.m_table_share_sizing= 0;
49 param.m_file_class_sizing= 0;
50 param.m_socket_class_sizing= 0;
51 param.m_mutex_sizing= 1000;
52 param.m_rwlock_sizing= 0;
53 param.m_cond_sizing= 0;
54 param.m_thread_sizing= 0;
55 param.m_table_sizing= 0;
56 param.m_file_sizing= 0;
57 param.m_file_handle_sizing= 0;
58 param.m_socket_sizing= 0;
59 param.m_events_waits_history_sizing= 0;
60 param.m_events_waits_history_long_sizing= 0;
61 param.m_setup_actor_sizing= 0;
62 param.m_setup_object_sizing= 0;
63 param.m_host_sizing= 0;
64 param.m_user_sizing= 0;
65 param.m_account_sizing= 0;
66 param.m_stage_class_sizing= 0;
67 param.m_events_stages_history_sizing= 0;
68 param.m_events_stages_history_long_sizing= 0;
69 param.m_statement_class_sizing= 0;
70 param.m_events_statements_history_sizing= 0;
71 param.m_events_statements_history_long_sizing= 0;
72 param.m_session_connect_attrs_sizing= 0;
73
74 init_event_name_sizing(& param);
75 rc= init_instruments(& param);
76 ok(rc == 1, "oom (mutex)");
77 cleanup_instruments();
78
79 param.m_enabled= true;
80 param.m_mutex_class_sizing= 0;
81 param.m_rwlock_class_sizing= 10;
82 param.m_cond_class_sizing= 0;
83 param.m_thread_class_sizing= 0;
84 param.m_table_share_sizing= 0;
85 param.m_file_class_sizing= 0;
86 param.m_socket_class_sizing= 0;
87 param.m_mutex_sizing= 0;
88 param.m_rwlock_sizing= 1000;
89 param.m_cond_sizing= 0;
90 param.m_thread_sizing= 0;
91 param.m_table_sizing= 0;
92 param.m_file_sizing= 0;
93 param.m_file_handle_sizing= 0;
94 param.m_socket_sizing= 0;
95 param.m_events_waits_history_sizing= 0;
96 param.m_events_waits_history_long_sizing= 0;
97 param.m_setup_actor_sizing= 0;
98 param.m_setup_object_sizing= 0;
99 param.m_host_sizing= 0;
100 param.m_user_sizing= 0;
101 param.m_account_sizing= 0;
102 param.m_stage_class_sizing= 0;
103 param.m_events_stages_history_sizing= 0;
104 param.m_events_stages_history_long_sizing= 0;
105 param.m_statement_class_sizing= 0;
106 param.m_events_statements_history_sizing= 0;
107 param.m_events_statements_history_long_sizing= 0;
108 param.m_session_connect_attrs_sizing= 0;
109
110 init_event_name_sizing(& param);
111 rc= init_instruments(& param);
112 ok(rc == 1, "oom (rwlock)");
113 cleanup_instruments();
114
115 param.m_enabled= true;
116 param.m_mutex_class_sizing= 0;
117 param.m_rwlock_class_sizing= 0;
118 param.m_cond_class_sizing= 10;
119 param.m_thread_class_sizing= 0;
120 param.m_table_share_sizing= 0;
121 param.m_file_class_sizing= 0;
122 param.m_socket_class_sizing= 0;
123 param.m_mutex_sizing= 0;
124 param.m_rwlock_sizing= 0;
125 param.m_cond_sizing= 1000;
126 param.m_thread_sizing= 0;
127 param.m_table_sizing= 0;
128 param.m_file_sizing= 0;
129 param.m_file_handle_sizing= 0;
130 param.m_socket_sizing= 0;
131 param.m_events_waits_history_sizing= 0;
132 param.m_events_waits_history_long_sizing= 0;
133 param.m_setup_actor_sizing= 0;
134 param.m_setup_object_sizing= 0;
135 param.m_host_sizing= 0;
136 param.m_user_sizing= 0;
137 param.m_account_sizing= 0;
138 param.m_stage_class_sizing= 0;
139 param.m_events_stages_history_sizing= 0;
140 param.m_events_stages_history_long_sizing= 0;
141 param.m_statement_class_sizing= 0;
142 param.m_events_statements_history_sizing= 0;
143 param.m_events_statements_history_long_sizing= 0;
144 param.m_session_connect_attrs_sizing= 0;
145
146 init_event_name_sizing(& param);
147 rc= init_instruments(& param);
148 ok(rc == 1, "oom (cond)");
149 cleanup_instruments();
150
151 param.m_enabled= true;
152 param.m_mutex_class_sizing= 0;
153 param.m_rwlock_class_sizing= 0;
154 param.m_cond_class_sizing= 0;
155 param.m_thread_class_sizing= 0;
156 param.m_table_share_sizing= 0;
157 param.m_file_class_sizing= 10;
158 param.m_socket_class_sizing= 0;
159 param.m_mutex_sizing= 0;
160 param.m_rwlock_sizing= 0;
161 param.m_cond_sizing= 0;
162 param.m_thread_sizing= 0;
163 param.m_table_sizing= 0;
164 param.m_file_sizing= 1000;
165 param.m_file_handle_sizing= 1000;
166 param.m_socket_sizing= 0;
167 param.m_events_waits_history_sizing= 0;
168 param.m_events_waits_history_long_sizing= 0;
169 param.m_setup_actor_sizing= 0;
170 param.m_setup_object_sizing= 0;
171 param.m_host_sizing= 0;
172 param.m_user_sizing= 0;
173 param.m_account_sizing= 0;
174 param.m_stage_class_sizing= 0;
175 param.m_events_stages_history_sizing= 0;
176 param.m_events_stages_history_long_sizing= 0;
177 param.m_statement_class_sizing= 0;
178 param.m_events_statements_history_sizing= 0;
179 param.m_events_statements_history_long_sizing= 0;
180 param.m_session_connect_attrs_sizing= 0;
181
182 init_event_name_sizing(& param);
183 rc= init_instruments(& param);
184 ok(rc == 1, "oom (file)");
185 cleanup_instruments();
186
187 param.m_enabled= true;
188 param.m_mutex_class_sizing= 0;
189 param.m_rwlock_class_sizing= 0;
190 param.m_cond_class_sizing= 0;
191 param.m_thread_class_sizing= 0;
192 param.m_table_share_sizing= 0;
193 param.m_file_class_sizing= 0;
194 param.m_mutex_sizing= 0;
195 param.m_rwlock_sizing= 0;
196 param.m_cond_sizing= 0;
197 param.m_thread_sizing= 0;
198 param.m_table_sizing= 0;
199 param.m_file_sizing= 0;
200 param.m_file_handle_sizing= 1000;
201 param.m_events_waits_history_sizing= 0;
202 param.m_events_waits_history_long_sizing= 0;
203 param.m_setup_actor_sizing= 0;
204 param.m_setup_object_sizing= 0;
205 param.m_host_sizing= 0;
206 param.m_user_sizing= 0;
207 param.m_account_sizing= 0;
208 param.m_stage_class_sizing= 0;
209 param.m_events_stages_history_sizing= 0;
210 param.m_events_stages_history_long_sizing= 0;
211 param.m_statement_class_sizing= 0;
212 param.m_events_statements_history_sizing= 0;
213 param.m_events_statements_history_long_sizing= 0;
214 param.m_session_connect_attrs_sizing= 0;
215
216 init_event_name_sizing(& param);
217 rc= init_instruments(& param);
218 ok(rc == 1, "oom (file handle)");
219 cleanup_instruments();
220
221 param.m_enabled= true;
222 param.m_mutex_class_sizing= 0;
223 param.m_rwlock_class_sizing= 0;
224 param.m_cond_class_sizing= 0;
225 param.m_thread_class_sizing= 0;
226 param.m_table_share_sizing= 10;
227 param.m_file_class_sizing= 0;
228 param.m_socket_class_sizing= 0;
229 param.m_mutex_sizing= 0;
230 param.m_rwlock_sizing= 0;
231 param.m_cond_sizing= 0;
232 param.m_thread_sizing= 0;
233 param.m_table_sizing= 1000;
234 param.m_file_sizing= 0;
235 param.m_file_handle_sizing= 0;
236 param.m_socket_sizing= 0;
237 param.m_events_waits_history_sizing= 0;
238 param.m_events_waits_history_long_sizing= 0;
239 param.m_setup_actor_sizing= 0;
240 param.m_setup_object_sizing= 0;
241 param.m_host_sizing= 0;
242 param.m_user_sizing= 0;
243 param.m_account_sizing= 0;
244 param.m_stage_class_sizing= 0;
245 param.m_events_stages_history_sizing= 0;
246 param.m_events_stages_history_long_sizing= 0;
247 param.m_statement_class_sizing= 0;
248 param.m_events_statements_history_sizing= 0;
249 param.m_events_statements_history_long_sizing= 0;
250 param.m_session_connect_attrs_sizing= 0;
251
252 init_event_name_sizing(& param);
253 rc= init_instruments(& param);
254 ok(rc == 1, "oom (table)");
255 cleanup_instruments();
256
257 param.m_enabled= true;
258 param.m_mutex_class_sizing= 0;
259 param.m_rwlock_class_sizing= 0;
260 param.m_cond_class_sizing= 0;
261 param.m_thread_class_sizing= 10;
262 param.m_table_share_sizing= 0;
263 param.m_file_class_sizing= 0;
264 param.m_socket_class_sizing= 0;
265 param.m_mutex_sizing= 0;
266 param.m_rwlock_sizing= 0;
267 param.m_cond_sizing= 0;
268 param.m_thread_sizing= 1000;
269 param.m_table_sizing= 0;
270 param.m_file_sizing= 0;
271 param.m_file_handle_sizing= 0;
272 param.m_socket_sizing= 0;
273 param.m_events_waits_history_sizing= 0;
274 param.m_events_waits_history_long_sizing= 0;
275 param.m_setup_actor_sizing= 0;
276 param.m_setup_object_sizing= 0;
277 param.m_host_sizing= 0;
278 param.m_user_sizing= 0;
279 param.m_account_sizing= 0;
280 param.m_stage_class_sizing= 0;
281 param.m_events_stages_history_sizing= 0;
282 param.m_events_stages_history_long_sizing= 0;
283 param.m_statement_class_sizing= 0;
284 param.m_events_statements_history_sizing= 0;
285 param.m_events_statements_history_long_sizing= 0;
286 param.m_session_connect_attrs_sizing= 0;
287
288 init_event_name_sizing(& param);
289 rc= init_instruments(& param);
290 ok(rc == 1, "oom (thread)");
291 cleanup_instruments();
292
293 stub_alloc_always_fails= false;
294
295 param.m_enabled= true;
296 param.m_mutex_class_sizing= 0;
297 param.m_rwlock_class_sizing= 0;
298 param.m_cond_class_sizing= 0;
299 param.m_thread_class_sizing= 10;
300 param.m_table_share_sizing= 0;
301 param.m_file_class_sizing= 0;
302 param.m_socket_class_sizing= 0;
303 param.m_mutex_sizing= 0;
304 param.m_rwlock_sizing= 0;
305 param.m_cond_sizing= 0;
306 param.m_thread_sizing= 1000;
307 param.m_table_sizing= 0;
308 param.m_file_sizing= 0;
309 param.m_file_handle_sizing= 0;
310 param.m_socket_sizing= 0;
311 param.m_events_waits_history_sizing= 10;
312 param.m_events_waits_history_long_sizing= 0;
313 param.m_setup_actor_sizing= 0;
314 param.m_setup_object_sizing= 0;
315 param.m_host_sizing= 0;
316 param.m_user_sizing= 0;
317 param.m_account_sizing= 0;
318 param.m_stage_class_sizing= 0;
319 param.m_events_stages_history_sizing= 0;
320 param.m_events_stages_history_long_sizing= 0;
321 param.m_statement_class_sizing= 0;
322 param.m_events_statements_history_sizing= 0;
323 param.m_events_statements_history_long_sizing= 0;
324 param.m_session_connect_attrs_sizing= 0;
325
326 stub_alloc_fails_after_count= 2;
327 init_event_name_sizing(& param);
328 rc= init_instruments(& param);
329 ok(rc == 1, "oom (thread waits history sizing)");
330 cleanup_instruments();
331
332 param.m_enabled= true;
333 param.m_mutex_class_sizing= 50;
334 param.m_rwlock_class_sizing= 50;
335 param.m_cond_class_sizing= 50;
336 param.m_thread_class_sizing= 10;
337 param.m_table_share_sizing= 0;
338 param.m_file_class_sizing= 50;
339 param.m_socket_class_sizing= 0;
340 param.m_mutex_sizing= 0;
341 param.m_rwlock_sizing= 0;
342 param.m_cond_sizing= 0;
343 param.m_thread_sizing= 1000;
344 param.m_table_sizing= 0;
345 param.m_file_sizing= 0;
346 param.m_file_handle_sizing= 0;
347 param.m_socket_sizing= 0;
348 param.m_events_waits_history_sizing= 0;
349 param.m_events_waits_history_long_sizing= 0;
350 param.m_setup_actor_sizing= 0;
351 param.m_setup_object_sizing= 0;
352 param.m_stage_class_sizing= 0;
353 param.m_events_stages_history_sizing= 0;
354 param.m_events_stages_history_long_sizing= 0;
355 param.m_statement_class_sizing= 0;
356 param.m_events_statements_history_sizing= 0;
357 param.m_events_statements_history_long_sizing= 0;
358 param.m_session_connect_attrs_sizing= 0;
359
360 stub_alloc_fails_after_count= 2;
361 init_event_name_sizing(& param);
362 rc= init_instruments(& param);
363 ok(rc == 1, "oom (per thread wait)");
364
365 cleanup_sync_class();
366 cleanup_thread_class();
367 cleanup_file_class();
368 cleanup_instruments();
369
370 param.m_enabled= true;
371 param.m_mutex_class_sizing= 0;
372 param.m_rwlock_class_sizing= 0;
373 param.m_cond_class_sizing= 0;
374 param.m_thread_class_sizing= 0;
375 param.m_table_share_sizing= 0;
376 param.m_file_class_sizing= 0;
377 param.m_socket_class_sizing= 10;
378 param.m_mutex_sizing= 0;
379 param.m_rwlock_sizing= 0;
380 param.m_cond_sizing= 0;
381 param.m_thread_sizing= 0;
382 param.m_table_sizing= 0;
383 param.m_file_sizing= 0;
384 param.m_file_handle_sizing= 0;
385 param.m_socket_sizing= 1000;
386 param.m_events_waits_history_sizing= 0;
387 param.m_events_waits_history_long_sizing= 0;
388 param.m_setup_actor_sizing= 0;
389 param.m_setup_object_sizing= 0;
390
391 init_event_name_sizing(& param);
392 rc= init_instruments(& param);
393 ok(rc == 1, "oom (socket)");
394
395 cleanup_instruments();
396
397 param.m_host_sizing= 0;
398 param.m_user_sizing= 0;
399 param.m_account_sizing= 0;
400 param.m_stage_class_sizing= 0;
401 param.m_events_stages_history_sizing= 0;
402 param.m_events_stages_history_long_sizing= 0;
403 param.m_statement_class_sizing= 0;
404 param.m_events_statements_history_sizing= 0;
405 param.m_events_statements_history_long_sizing= 0;
406 param.m_session_connect_attrs_sizing= 0;
407
408 stub_alloc_fails_after_count= 1;
409 init_event_name_sizing(& param);
410 rc= init_instruments(& param);
411 ok(rc == 1, "oom (per thread waits)");
412 cleanup_instruments();
413
414 param.m_enabled= true;
415 param.m_mutex_class_sizing= 0;
416 param.m_rwlock_class_sizing= 0;
417 param.m_cond_class_sizing= 0;
418 param.m_thread_class_sizing= 10;
419 param.m_table_share_sizing= 0;
420 param.m_file_class_sizing= 0;
421 param.m_mutex_sizing= 0;
422 param.m_rwlock_sizing= 0;
423 param.m_cond_sizing= 0;
424 param.m_thread_sizing= 1000;
425 param.m_table_sizing= 0;
426 param.m_file_sizing= 0;
427 param.m_file_handle_sizing= 0;
428 param.m_events_waits_history_sizing= 0;
429 param.m_events_waits_history_long_sizing= 0;
430 param.m_setup_actor_sizing= 0;
431 param.m_setup_object_sizing= 0;
432 param.m_host_sizing= 0;
433 param.m_user_sizing= 0;
434 param.m_account_sizing= 0;
435 param.m_stage_class_sizing= 0;
436 param.m_events_stages_history_sizing= 10;
437 param.m_events_stages_history_long_sizing= 0;
438 param.m_statement_class_sizing= 0;
439 param.m_events_statements_history_sizing= 0;
440 param.m_events_statements_history_long_sizing= 0;
441 param.m_session_connect_attrs_sizing= 0;
442
443 stub_alloc_fails_after_count= 3;
444 init_event_name_sizing(& param);
445 rc= init_instruments(& param);
446 ok(rc == 1, "oom (thread stages history sizing)");
447
448 cleanup_thread_class();
449 cleanup_instruments();
450
451 param.m_enabled= true;
452 param.m_mutex_class_sizing= 0;
453 param.m_rwlock_class_sizing= 0;
454 param.m_cond_class_sizing= 0;
455 param.m_thread_class_sizing= 10;
456 param.m_table_share_sizing= 0;
457 param.m_file_class_sizing= 0;
458 param.m_mutex_sizing= 0;
459 param.m_rwlock_sizing= 0;
460 param.m_cond_sizing= 0;
461 param.m_thread_sizing= 1000;
462 param.m_table_sizing= 0;
463 param.m_file_sizing= 0;
464 param.m_file_handle_sizing= 0;
465 param.m_events_waits_history_sizing= 0;
466 param.m_events_waits_history_long_sizing= 0;
467 param.m_setup_actor_sizing= 0;
468 param.m_setup_object_sizing= 0;
469 param.m_host_sizing= 0;
470 param.m_user_sizing= 0;
471 param.m_account_sizing= 0;
472 param.m_stage_class_sizing= 50;
473 param.m_events_stages_history_sizing= 0;
474 param.m_events_stages_history_long_sizing= 0;
475 param.m_statement_class_sizing= 0;
476 param.m_events_statements_history_sizing= 0;
477 param.m_events_statements_history_long_sizing= 0;
478 param.m_session_connect_attrs_sizing= 0;
479
480 stub_alloc_fails_after_count= 2;
481 init_event_name_sizing(& param);
482 rc= init_instruments(& param);
483 ok(rc == 1, "oom (per thread stages)");
484
485 cleanup_stage_class();
486 cleanup_thread_class();
487 cleanup_instruments();
488
489 param.m_enabled= true;
490 param.m_mutex_class_sizing= 0;
491 param.m_rwlock_class_sizing= 0;
492 param.m_cond_class_sizing= 0;
493 param.m_thread_class_sizing= 10;
494 param.m_table_share_sizing= 0;
495 param.m_file_class_sizing= 0;
496 param.m_mutex_sizing= 0;
497 param.m_rwlock_sizing= 0;
498 param.m_cond_sizing= 0;
499 param.m_thread_sizing= 1000;
500 param.m_table_sizing= 0;
501 param.m_file_sizing= 0;
502 param.m_file_handle_sizing= 0;
503 param.m_events_waits_history_sizing= 0;
504 param.m_events_waits_history_long_sizing= 0;
505 param.m_setup_actor_sizing= 0;
506 param.m_setup_object_sizing= 0;
507 param.m_host_sizing= 0;
508 param.m_user_sizing= 0;
509 param.m_account_sizing= 0;
510 param.m_stage_class_sizing= 0;
511 param.m_events_stages_history_sizing= 0;
512 param.m_events_stages_history_long_sizing= 0;
513 param.m_statement_class_sizing= 0;
514 param.m_events_statements_history_sizing= 10;
515 param.m_events_statements_history_long_sizing= 0;
516 param.m_session_connect_attrs_sizing= 0;
517
518 stub_alloc_fails_after_count= 2;
519 init_event_name_sizing(& param);
520 rc= init_instruments(& param);
521 ok(rc == 1, "oom (thread statements history sizing)");
522
523 cleanup_thread_class();
524 cleanup_instruments();
525
526 param.m_enabled= true;
527 param.m_mutex_class_sizing= 0;
528 param.m_rwlock_class_sizing= 0;
529 param.m_cond_class_sizing= 0;
530 param.m_thread_class_sizing= 10;
531 param.m_table_share_sizing= 0;
532 param.m_file_class_sizing= 0;
533 param.m_mutex_sizing= 0;
534 param.m_rwlock_sizing= 0;
535 param.m_cond_sizing= 0;
536 param.m_thread_sizing= 1000;
537 param.m_table_sizing= 0;
538 param.m_file_sizing= 0;
539 param.m_file_handle_sizing= 0;
540 param.m_events_waits_history_sizing= 0;
541 param.m_events_waits_history_long_sizing= 0;
542 param.m_setup_actor_sizing= 0;
543 param.m_setup_object_sizing= 0;
544 param.m_host_sizing= 0;
545 param.m_user_sizing= 0;
546 param.m_account_sizing= 0;
547 param.m_stage_class_sizing= 0;
548 param.m_events_stages_history_sizing= 0;
549 param.m_events_stages_history_long_sizing= 0;
550 param.m_statement_class_sizing= 50;
551 param.m_events_statements_history_sizing= 0;
552 param.m_events_statements_history_long_sizing= 0;
553 param.m_session_connect_attrs_sizing= 0;
554
555 stub_alloc_fails_after_count= 2;
556 init_event_name_sizing(& param);
557 rc= init_instruments(& param);
558 ok(rc == 1, "oom (per thread statements)");
559
560 cleanup_statement_class();
561 cleanup_thread_class();
562 cleanup_instruments();
563
564 param.m_enabled= true;
565 param.m_mutex_class_sizing= 10;
566 param.m_rwlock_class_sizing= 0;
567 param.m_cond_class_sizing= 0;
568 param.m_thread_class_sizing= 0;
569 param.m_table_share_sizing= 0;
570 param.m_file_class_sizing= 0;
571 param.m_mutex_sizing= 0;
572 param.m_rwlock_sizing= 0;
573 param.m_cond_sizing= 0;
574 param.m_thread_sizing= 0;
575 param.m_table_sizing= 0;
576 param.m_file_sizing= 0;
577 param.m_file_handle_sizing= 0;
578 param.m_events_waits_history_sizing= 0;
579 param.m_events_waits_history_long_sizing= 0;
580 param.m_setup_actor_sizing= 0;
581 param.m_setup_object_sizing= 0;
582 param.m_host_sizing= 0;
583 param.m_user_sizing= 0;
584 param.m_account_sizing= 0;
585 param.m_stage_class_sizing= 0;
586 param.m_events_stages_history_sizing= 0;
587 param.m_events_stages_history_long_sizing= 0;
588 param.m_statement_class_sizing= 0;
589 param.m_events_statements_history_sizing= 0;
590 param.m_events_statements_history_long_sizing= 0;
591 param.m_session_connect_attrs_sizing= 0;
592
593 stub_alloc_fails_after_count= 1;
594 init_event_name_sizing(& param);
595 rc= init_instruments(& param);
596 ok(rc == 1, "oom (global waits)");
597
598 cleanup_sync_class();
599 cleanup_instruments();
600
601 param.m_enabled= true;
602 param.m_mutex_class_sizing= 10;
603 param.m_rwlock_class_sizing= 0;
604 param.m_cond_class_sizing= 0;
605 param.m_thread_class_sizing= 0;
606 param.m_table_share_sizing= 0;
607 param.m_file_class_sizing= 0;
608 param.m_mutex_sizing= 0;
609 param.m_rwlock_sizing= 0;
610 param.m_cond_sizing= 0;
611 param.m_thread_sizing= 0;
612 param.m_table_sizing= 0;
613 param.m_file_sizing= 0;
614 param.m_file_handle_sizing= 0;
615 param.m_events_waits_history_sizing= 0;
616 param.m_events_waits_history_long_sizing= 0;
617 param.m_setup_actor_sizing= 0;
618 param.m_setup_object_sizing= 0;
619 param.m_host_sizing= 0;
620 param.m_user_sizing= 0;
621 param.m_account_sizing= 0;
622 param.m_stage_class_sizing= 20;
623 param.m_events_stages_history_sizing= 0;
624 param.m_events_stages_history_long_sizing= 0;
625 param.m_statement_class_sizing= 0;
626 param.m_events_statements_history_sizing= 0;
627 param.m_events_statements_history_long_sizing= 0;
628 param.m_session_connect_attrs_sizing= 0;
629
630 stub_alloc_fails_after_count= 3;
631 init_event_name_sizing(& param);
632 rc= init_stage_class(param.m_stage_class_sizing);
633 ok(rc == 0, "init stage class");
634 rc= init_instruments(& param);
635 ok(rc == 1, "oom (global stages)");
636
637 cleanup_sync_class();
638 cleanup_stage_class();
639 cleanup_instruments();
640
641 param.m_enabled= true;
642 param.m_mutex_class_sizing= 10;
643 param.m_rwlock_class_sizing= 0;
644 param.m_cond_class_sizing= 0;
645 param.m_thread_class_sizing= 0;
646 param.m_table_share_sizing= 0;
647 param.m_file_class_sizing= 0;
648 param.m_mutex_sizing= 0;
649 param.m_rwlock_sizing= 0;
650 param.m_cond_sizing= 0;
651 param.m_thread_sizing= 0;
652 param.m_table_sizing= 0;
653 param.m_file_sizing= 0;
654 param.m_file_handle_sizing= 0;
655 param.m_events_waits_history_sizing= 0;
656 param.m_events_waits_history_long_sizing= 0;
657 param.m_setup_actor_sizing= 0;
658 param.m_setup_object_sizing= 0;
659 param.m_host_sizing= 0;
660 param.m_user_sizing= 0;
661 param.m_account_sizing= 0;
662 param.m_stage_class_sizing= 0;
663 param.m_events_stages_history_sizing= 0;
664 param.m_events_stages_history_long_sizing= 0;
665 param.m_statement_class_sizing= 20;
666 param.m_events_statements_history_sizing= 0;
667 param.m_events_statements_history_long_sizing= 0;
668 param.m_session_connect_attrs_sizing= 0;
669
670 stub_alloc_fails_after_count= 3;
671 init_event_name_sizing(& param);
672 rc= init_statement_class(param.m_statement_class_sizing);
673 ok(rc == 0, "init statement class");
674 rc= init_instruments(& param);
675 ok(rc == 1, "oom (global statements)");
676
677 cleanup_sync_class();
678 cleanup_statement_class();
679 cleanup_instruments();
680 }
681
do_all_tests()682 void do_all_tests()
683 {
684 PFS_atomic::init();
685
686 test_oom();
687
688 PFS_atomic::cleanup();
689 }
690
main(int,char **)691 int main(int, char **)
692 {
693 plan(20);
694 MY_INIT("pfs_instr-oom-t");
695 do_all_tests();
696 return (exit_status());
697 }
698
699