@@ -389,6 +389,17 @@ class LockTest {
389
389
}
390
390
}
391
391
392
+ void Test14 () {
393
+ if (test_number > 0 && test_number != 14 ) return ;
394
+ fprintf (stderr, " Starting Test14: create lots of locks in 4 threads\n " );
395
+ Init (10 );
396
+ // CHECK-RD: Starting Test14
397
+ RunThreads (&LockTest::CreateAndDestroyLocksLoop,
398
+ &LockTest::CreateAndDestroyLocksLoop,
399
+ &LockTest::CreateAndDestroyLocksLoop,
400
+ &LockTest::CreateAndDestroyLocksLoop);
401
+ }
402
+
392
403
private:
393
404
void Lock2 (size_t l1, size_t l2) { L (l1); L (l2); U (l2); U (l1); }
394
405
void Lock_0_1 () { Lock2 (0 , 1 ); }
@@ -406,9 +417,17 @@ class LockTest {
406
417
void Lock1_Loop_2 () { Lock1_Loop (20 , iter_count); }
407
418
408
419
void CreateAndDestroyManyLocks () {
409
- LockType create_many_locks_but_never_acquire[ kDeadlockGraphSize ];
410
- ( void )create_many_locks_but_never_acquire ;
420
+ LockType * create_many_locks_but_never_acquire =
421
+ new LockType[ kDeadlockGraphSize ] ;
411
422
(void )create_many_locks_but_never_acquire;
423
+ delete [] create_many_locks_but_never_acquire;
424
+ }
425
+
426
+ void CreateAndDestroyLocksLoop () {
427
+ for (size_t it = 0 ; it <= iter_count; it++) {
428
+ LockType some_locks[10 ];
429
+ (void )some_locks;
430
+ }
412
431
}
413
432
414
433
void CreateLockUnlockAndDestroyManyLocks () {
@@ -466,6 +485,7 @@ int main(int argc, char **argv) {
466
485
LockTest ().Test11 ();
467
486
LockTest ().Test12 ();
468
487
LockTest ().Test13 ();
488
+ LockTest ().Test14 ();
469
489
fprintf (stderr, " ALL-DONE\n " );
470
490
// CHECK: ALL-DONE
471
491
}
0 commit comments