teak-llvm/lldb/packages/Python/lldbsuite/test/lang/objc/print-obj/blocked.m
Chandler Carruth 2946cd7010 Update the file headers across all of the LLVM projects in the monorepo
to reflect the new license.

We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.

Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.

llvm-svn: 351636
2019-01-19 08:50:56 +00:00

73 lines
1.9 KiB
Objective-C

//===-- blocked.m --------------------------------------------------*- ObjC -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// This file is for testing running "print object" in a case where another thread
// blocks the print object from making progress. Set a breakpoint on the line in
// my_pthread_routine as indicated. Then switch threads to the main thread, and
// do print the lock_me object. Since that will try to get the lock already gotten
// by my_pthread_routime thread, it will have to switch to running all threads, and
// that should then succeed.
//
#include <Foundation/Foundation.h>
#include <pthread.h>
static pthread_mutex_t test_mutex;
static void Mutex_Init (void)
{
pthread_mutexattr_t tmp_mutex_attr;
pthread_mutexattr_init(&tmp_mutex_attr);
pthread_mutex_init(&test_mutex, &tmp_mutex_attr);
}
@interface LockMe :NSObject
{
}
- (NSString *) description;
@end
@implementation LockMe
- (NSString *) description
{
printf ("LockMe trying to get the lock.\n");
pthread_mutex_lock(&test_mutex);
printf ("LockMe got the lock.\n");
pthread_mutex_unlock(&test_mutex);
return @"I am pretty special.\n";
}
@end
void *
my_pthread_routine (void *data)
{
printf ("my_pthread_routine about to enter.\n");
pthread_mutex_lock(&test_mutex);
printf ("Releasing Lock.\n"); // Set a breakpoint here.
pthread_mutex_unlock(&test_mutex);
return NULL;
}
int
main ()
{
pthread_attr_t tmp_attr;
pthread_attr_init (&tmp_attr);
pthread_t my_pthread;
Mutex_Init ();
LockMe *lock_me = [[LockMe alloc] init];
pthread_create (&my_pthread, &tmp_attr, my_pthread_routine, NULL);
pthread_join (my_pthread, NULL);
return 0;
}