| // Copyright 2016 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | // Test that using the Go profiler in a C program does not crash. | 
 |  | 
 | #include <stddef.h> | 
 | #include <sys/time.h> | 
 |  | 
 | #include "libgo6.h" | 
 |  | 
 | int main(int argc, char **argv) { | 
 | 	struct timeval tvstart, tvnow; | 
 | 	int diff; | 
 |  | 
 | 	gettimeofday(&tvstart, NULL); | 
 |  | 
 | 	go_start_profile(); | 
 |  | 
 | 	// Busy wait so we have something to profile. | 
 | 	// If we just sleep the profiling signal will never fire. | 
 | 	while (1) { | 
 | 		gettimeofday(&tvnow, NULL); | 
 | 		diff = (tvnow.tv_sec - tvstart.tv_sec) * 1000 * 1000 + (tvnow.tv_usec - tvstart.tv_usec); | 
 |  | 
 | 		// Profile frequency is 100Hz so we should definitely | 
 | 		// get a signal in 50 milliseconds. | 
 | 		if (diff > 50 * 1000) | 
 | 			break; | 
 | 	} | 
 |  | 
 | 	go_stop_profile(); | 
 | 	return 0; | 
 | } |