You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2013/09/10 18:45:22 UTC

[2/3] git commit: TS-2174: Fix StatBinaryEval() on div operation

TS-2174: Fix StatBinaryEval() on div operation

We should fore the type of result to be RecFloat on div operation,
otherwise we can't get the fraction when dividing two RecInt.

Signed-off-by: Yunkai Zhang <qi...@taobao.com>


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3751008c
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3751008c
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3751008c

Branch: refs/heads/4.0.x
Commit: 3751008cb64a9b37227ff40659895dd322ac322a
Parents: e543f69
Author: Yunkai Zhang <qi...@taobao.com>
Authored: Wed Sep 4 00:57:07 2013 +0800
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Tue Sep 10 10:37:37 2013 -0600

----------------------------------------------------------------------
 mgmt/stats/StatType.cc | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3751008c/mgmt/stats/StatType.cc
----------------------------------------------------------------------
diff --git a/mgmt/stats/StatType.cc b/mgmt/stats/StatType.cc
index 0017e5d..3e13d78 100644
--- a/mgmt/stats/StatType.cc
+++ b/mgmt/stats/StatType.cc
@@ -947,6 +947,22 @@ StatExprToken *StatObject::StatBinaryEval(StatExprToken * left, char op,
   case '/':
     RecData recTmp;
     RecDataClear(RECD_NULL, &recTmp);
+
+    /*
+     * Force the type of result to be RecFloat on div operation
+     */
+    if (result->m_token_type != RECD_FLOAT && result->m_token_type != RECD_CONST) {
+      RecFloat t;
+
+      result->m_token_type = RECD_FLOAT;
+
+      t = (RecFloat)l.rec_int;
+      l.rec_float = t;
+
+      t = (RecFloat)r.rec_int;
+      r.rec_float = t;
+    }
+
     if (RecDataCmp(result->m_token_type, r, recTmp)) {
       result->m_token_value = RecDataDiv(result->m_token_type, l, r);
     }