Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
don't catch an exception that is never thrown
authorMartin Quinson <martin.quinson@loria.fr>
Sun, 2 Sep 2018 00:09:27 +0000 (02:09 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Sun, 2 Sep 2018 00:11:53 +0000 (02:11 +0200)
xbt_os_thread_create() asserts that it succeeds, it does not throw
anything. So put the documentation in the doc instead of displaying it
when that non-existent exception is received.

doc/doxygen/java.doc
src/bindings/java/JavaContext.cpp

index 81c8027..d4c273a 100644 (file)
@@ -61,6 +61,15 @@ $ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$SIMGRID_ROOT/lib
 Add these lines to your `~/.bashrc` file or equivalent to make these
 settings permanent even after a reboot.
 
+** **pthread_create failed**
+
+You reached the amount of threads that can be run on your system. Try
+increasing the thread limits of your operating system.
+
+If you manage to get it working, you could also switch to the Java
+co-routines (see @ref bindings_java_coro_install). Unfortunately,
+nobody used them since a few years, so they may well be broken by now.
+
 ** **Other errors**
 
 When using jMSG, your program can crash for 3 main reasons:
index 37c96d7..82de71b 100644 (file)
@@ -56,28 +56,12 @@ JavaContext::JavaContext(std::function<void()> code,
         smx_actor_t process)
   : Context(std::move(code), cleanup_func, process)
 {
-  static int thread_amount=0;
-  thread_amount++;
-
-  /* If the user provided a function for the process then use it otherwise is the context for maestro */
+  /* If the user provided a function for the process then use it. Otherwise is the context for maestro */
   if (has_code()) {
     this->begin = xbt_os_sem_init(0);
     this->end = xbt_os_sem_init(0);
 
-    try {
-       this->thread = xbt_os_thread_create(
-         nullptr, JavaContext::wrapper, this, nullptr);
-    }
-    catch (xbt_ex& ex) {
-      char* str = bprintf(
-        "Failed to create context #%d. You may want to switch to Java coroutines to increase your limits (error: %s)."
-        "See the Install section of simgrid-java documentation (in doc/install.html) for more on coroutines.",
-        thread_amount, ex.what());
-      xbt_ex new_exception(XBT_THROW_POINT, str);
-      new_exception.category = ex.category;
-      new_exception.value = ex.value;
-      std::throw_with_nested(std::move(new_exception));
-    }
+    this->thread = xbt_os_thread_create(nullptr, JavaContext::wrapper, this, nullptr);
   } else {
     xbt_os_thread_set_extra_data(this);
   }