java/Class: use DiscardException() in FindOptional()
Sometimes, the JVM returns a non-nullptr value with an exception pending (seen on Android 1.6, maybe a Dalvik bug?). Let's catch all such cases.
This commit is contained in:
		| @@ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * Copyright (C) 2010-2011 Max Kellermann <max.kellermann@gmail.com> |  * Copyright (C) 2010-2018 Max Kellermann <max.kellermann@gmail.com> | ||||||
|  * |  * | ||||||
|  * Redistribution and use in source and binary forms, with or without |  * Redistribution and use in source and binary forms, with or without | ||||||
|  * modification, are permitted provided that the following conditions |  * modification, are permitted provided that the following conditions | ||||||
| @@ -31,6 +31,7 @@ | |||||||
| #define JAVA_CLASS_HXX | #define JAVA_CLASS_HXX | ||||||
|  |  | ||||||
| #include "Ref.hxx" | #include "Ref.hxx" | ||||||
|  | #include "Exception.hxx" | ||||||
|  |  | ||||||
| #include <assert.h> | #include <assert.h> | ||||||
|  |  | ||||||
| @@ -68,10 +69,8 @@ namespace Java { | |||||||
| 			assert(name != nullptr); | 			assert(name != nullptr); | ||||||
|  |  | ||||||
| 			jclass cls = env->FindClass(name); | 			jclass cls = env->FindClass(name); | ||||||
| 			if (cls == nullptr) { | 			if (DiscardException(env)) | ||||||
| 				env->ExceptionClear(); |  | ||||||
| 				return false; | 				return false; | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			Set(env, cls); | 			Set(env, cls); | ||||||
| 			env->DeleteLocalRef(cls); | 			env->DeleteLocalRef(cls); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Max Kellermann
					Max Kellermann