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