Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
Alchemy Viewer
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Package Registry
Operate
Terraform modules
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Silent mode is enabled
All outbound communications are blocked.
Learn more
.
Show more breadcrumbs
Alchemy Viewer
Alchemy Viewer
Commits
205f77e0
Commit
205f77e0
authored
12 years ago
by
Nat Goodspeed
Browse files
Options
Downloads
Plain Diff
MAINT-1986: merge in server-trunk fixes
parents
1be900c1
5c334bdc
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
indra/llcommon/lluuid.cpp
+28
-9
28 additions, 9 deletions
indra/llcommon/lluuid.cpp
indra/llcommon/lluuid.h
+3
-0
3 additions, 0 deletions
indra/llcommon/lluuid.h
with
31 additions
and
9 deletions
indra/llcommon/lluuid.cpp
+
28
−
9
View file @
205f77e0
...
...
@@ -44,10 +44,16 @@
#include
"llmd5.h"
#include
"llstring.h"
#include
"lltimer.h"
#include
"llthread.h"
const
LLUUID
LLUUID
::
null
;
const
LLTransactionID
LLTransactionID
::
tnull
;
// static
LLMutex
*
LLUUID
::
mMutex
=
NULL
;
/*
NOT DONE YET!!!
...
...
@@ -734,6 +740,7 @@ void LLUUID::getCurrentTime(uuid_time_t *timestamp)
getSystemTime
(
&
time_last
);
uuids_this_tick
=
uuids_per_tick
;
init
=
TRUE
;
mMutex
=
new
LLMutex
(
NULL
);
}
uuid_time_t
time_now
=
{
0
,
0
};
...
...
@@ -785,6 +792,7 @@ void LLUUID::generate()
#endif
if
(
!
has_init
)
{
has_init
=
1
;
if
(
getNodeID
(
node_id
)
<=
0
)
{
get_random_bytes
(
node_id
,
6
);
...
...
@@ -806,18 +814,24 @@ void LLUUID::generate()
#else
clock_seq
=
(
U16
)
ll_rand
(
65536
);
#endif
has_init
=
1
;
}
// get current time
getCurrentTime
(
&
timestamp
);
U16
our_clock_seq
=
clock_seq
;
// if clock went backward change clockseq
if
(
cmpTime
(
&
timestamp
,
&
time_last
)
==
-
1
)
{
// if clock hasn't changed or went backward, change clockseq
if
(
cmpTime
(
&
timestamp
,
&
time_last
)
!=
1
)
{
LLMutexLock
lock
(
mMutex
);
clock_seq
=
(
clock_seq
+
1
)
&
0x3FFF
;
if
(
clock_seq
==
0
)
clock_seq
++
;
if
(
clock_seq
==
0
)
clock_seq
++
;
our_clock_seq
=
clock_seq
;
// Ensure we're using a different clock_seq value from previous time
}
time_last
=
timestamp
;
memcpy
(
mData
+
10
,
node_id
,
6
);
/* Flawfinder: ignore */
U32
tmp
;
tmp
=
timestamp
.
low
;
...
...
@@ -839,7 +853,8 @@ void LLUUID::generate()
tmp
>>=
8
;
mData
[
6
]
=
(
unsigned
char
)
tmp
;
tmp
=
clock_seq
;
tmp
=
our_clock_seq
;
mData
[
9
]
=
(
unsigned
char
)
tmp
;
tmp
>>=
8
;
mData
[
8
]
=
(
unsigned
char
)
tmp
;
...
...
@@ -849,8 +864,6 @@ void LLUUID::generate()
md5_uuid
.
update
(
mData
,
16
);
md5_uuid
.
finalize
();
md5_uuid
.
raw_digest
(
mData
);
time_last
=
timestamp
;
}
void
LLUUID
::
generate
(
const
std
::
string
&
hash_string
)
...
...
@@ -864,8 +877,14 @@ U32 LLUUID::getRandomSeed()
static
unsigned
char
seed
[
16
];
/* Flawfinder: ignore */
getNodeID
(
&
seed
[
0
]);
seed
[
6
]
=
'\0'
;
seed
[
7
]
=
'\0'
;
// Incorporate the pid into the seed to prevent
// processes that start on the same host at the same
// time from generating the same seed.
pid_t
pid
=
LLApp
::
getPid
();
seed
[
6
]
=
(
unsigned
char
)(
pid
>>
8
);
seed
[
7
]
=
(
unsigned
char
)(
pid
);
getSystemTime
((
uuid_time_t
*
)(
&
seed
[
8
]));
LLMD5
md5_seed
;
...
...
This diff is collapsed.
Click to expand it.
indra/llcommon/lluuid.h
+
3
−
0
View file @
205f77e0
...
...
@@ -31,6 +31,8 @@
#include
"stdtypes.h"
#include
"llpreprocessor.h"
class
LLMutex
;
const
S32
UUID_BYTES
=
16
;
const
S32
UUID_WORDS
=
4
;
const
S32
UUID_STR_LENGTH
=
37
;
// actually wrong, should be 36 and use size below
...
...
@@ -118,6 +120,7 @@ class LL_COMMON_API LLUUID
static
BOOL
validate
(
const
std
::
string
&
in_string
);
// Validate that the UUID string is legal.
static
const
LLUUID
null
;
static
LLMutex
*
mMutex
;
static
U32
getRandomSeed
();
static
S32
getNodeID
(
unsigned
char
*
node_id
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment