Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go-fuse
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Levin Zimmermann
go-fuse
Commits
fbf3de98
Commit
fbf3de98
authored
Apr 24, 2011
by
Han-Wen Nienhuys
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Godoc style in bufferpool.go.
parent
3c5cacc1
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
9 additions
and
6 deletions
+9
-6
fuse/bufferpool.go
fuse/bufferpool.go
+9
-6
No files found.
fuse/bufferpool.go
View file @
fbf3de98
...
@@ -9,9 +9,9 @@ import (
...
@@ -9,9 +9,9 @@ import (
var
_
=
log
.
Println
var
_
=
log
.
Println
//
This implements a pool of buffers that returns slices with capacity
//
BufferPool implements a pool of buffers that returns slices with
//
(2^e * PAGESIZE) for e=0,1,... which have possibly been used, and
//
capacity (2^e * PAGESIZE) for e=0,1,... which have possibly been
// may contain random contents.
//
used, and
may contain random contents.
type
BufferPool
struct
{
type
BufferPool
struct
{
lock
sync
.
Mutex
lock
sync
.
Mutex
...
@@ -26,7 +26,7 @@ type BufferPool struct {
...
@@ -26,7 +26,7 @@ type BufferPool struct {
createdBuffers
int
createdBuffers
int
}
}
//
Returns
the smallest E such that 2^E >= Z.
//
IntToExponent
the smallest E such that 2^E >= Z.
func
IntToExponent
(
z
int
)
uint
{
func
IntToExponent
(
z
int
)
uint
{
x
:=
z
x
:=
z
var
exp
uint
=
0
var
exp
uint
=
0
...
@@ -80,6 +80,8 @@ func (me *BufferPool) addBuffer(slice []byte, exp uint) {
...
@@ -80,6 +80,8 @@ func (me *BufferPool) addBuffer(slice []byte, exp uint) {
me
.
buffersByExponent
[
exp
]
=
append
(
me
.
buffersByExponent
[
exp
],
slice
)
me
.
buffersByExponent
[
exp
]
=
append
(
me
.
buffersByExponent
[
exp
],
slice
)
}
}
// AllocBuffer creates a buffer of at least the given size. After use,
// it should be deallocated with FreeBuffer().
func
(
me
*
BufferPool
)
AllocBuffer
(
size
uint32
)
[]
byte
{
func
(
me
*
BufferPool
)
AllocBuffer
(
size
uint32
)
[]
byte
{
sz
:=
int
(
size
)
sz
:=
int
(
size
)
if
sz
<
PAGESIZE
{
if
sz
<
PAGESIZE
{
...
@@ -114,8 +116,9 @@ func (me *BufferPool) AllocBuffer(size uint32) []byte {
...
@@ -114,8 +116,9 @@ func (me *BufferPool) AllocBuffer(size uint32) []byte {
return
b
return
b
}
}
// Takes back a buffer if it was allocated through AllocBuffer. It is
// FreeBuffer takes back a buffer if it was allocated through
// not an error to call FreeBuffer() on a slice obtained elsewhere.
// AllocBuffer. It is not an error to call FreeBuffer() on a slice
// obtained elsewhere.
func
(
me
*
BufferPool
)
FreeBuffer
(
slice
[]
byte
)
{
func
(
me
*
BufferPool
)
FreeBuffer
(
slice
[]
byte
)
{
if
cap
(
slice
)
<
PAGESIZE
{
if
cap
(
slice
)
<
PAGESIZE
{
return
return
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment