* Bug #12135 fixed - stacksize('max') failed silently. 94/9894/2
Guillaume Horel [Sun, 2 Dec 2012 08:04:21 +0000 (09:04 +0100)]
Change-Id: I30a17cf542b33be4ca878389039b40ea59391323

scilab/CHANGES_5.4.X
scilab/modules/core/sci_gateway/c/sci_stacksize.c

index f3ba32a..579462f 100644 (file)
@@ -208,6 +208,8 @@ Bug fixes
 
 * Bug #12120 fixed - eigs was broken for complex sparse matrices.
 
+* Bug #12135 fixed - stacksize('max') failed silently.
+
 * Bug #12140 fixed - csvRead fails when comma is used as decimal mark.
 
 * Bug #12166 fixed - There was a bad label with drawaxis.
index 17542ee..ad223a1 100644 (file)
@@ -64,7 +64,7 @@ int C2F(sci_stacksize) (char *fname, unsigned long fname_len)
     {
         return sci_stacksizeNoRhs(fname);
     }
-    return dynParallelConcurrency()? dynParallelForbidden(fname) : sci_stacksizeOneRhs(fname);
+    return dynParallelConcurrency() ? dynParallelForbidden(fname) : sci_stacksizeOneRhs(fname);
 }
 
 /*--------------------------------------------------------------------------*/
@@ -108,7 +108,7 @@ static int sci_stacksizeOneRhs(char *fname)
         GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
         if ((m1 == 1) && (n1 == 1))
         {
-            unsigned long NEWMEMSTACKSIZE = (unsigned long)*stk(l1);
+            unsigned long NEWMEMSTACKSIZE = (unsigned long) * stk(l1);
 
             /* add 1 for alignment problems */
             if (is_a_valid_size_for_scilab_stack(NEWMEMSTACKSIZE + 1))
@@ -254,6 +254,7 @@ static int setStacksizeMax(char *fname)
     {
         unsigned long memmaxavailablebyscilab = get_max_memory_for_scilab_stack();
         unsigned long newMemSizeMax = maxmemfree;
+        int errCode;
 
         if (memmaxavailablebyscilab < newMemSizeMax)
         {
@@ -265,7 +266,12 @@ static int setStacksizeMax(char *fname)
             newMemSizeMax = MIN_STACKSIZE;
         }
 
-        setStacksize(newMemSizeMax);
+        errCode = setStacksize(newMemSizeMax);
+        if (errCode != 0)
+        {
+            setStacksize(backupSize);
+            Scierror(10001, _("%s: Cannot allocate memory.\n%s\n"), fname, getStackCreationErrorMessage(errCode));
+        }
         return 0;
     }
     else
@@ -281,7 +287,7 @@ static int setStacksizeMax(char *fname)
 /*--------------------------------------------------------------------------*/
 /*
  *
- * @return 0 if success 
+ * @return 0 if success
  *         -1 if cannot allocate this quantity of memory
  *         -2 if the requested size is smaller than the minimal one
  *         -3 unable to create (or resize) the stack (probably a malloc error
@@ -345,15 +351,15 @@ static char *getStackCreationErrorMessage(int errCode)
 {
     switch (errCode)
     {
-    case -1:
-        return _("%s: Cannot allocate this quantity of memory.\n");
-        break;
-    case -2:
-        return _("%s: The requested size is smaller than the minimal one.\n");
-        break;
-    case -3:
-        return _("%s: Unable to create (or resize) the stack (probably a malloc error).\n");
-        break;
+        case -1:
+            return _("%s: Cannot allocate this quantity of memory.\n");
+            break;
+        case -2:
+            return _("%s: The requested size is smaller than the minimal one.\n");
+            break;
+        case -3:
+            return _("%s: Unable to create (or resize) the stack (probably a malloc error).\n");
+            break;
     }
     return _("%s: Unknown error.\n");
 }