diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/federation/dereferencing/account.go | 7 | ||||
| -rw-r--r-- | internal/federation/dereferencing/emoji.go | 3 | ||||
| -rw-r--r-- | internal/federation/dereferencing/status.go | 2 | ||||
| -rw-r--r-- | internal/federation/dereferencing/util.go | 11 | ||||
| -rw-r--r-- | internal/util/sync.go | 29 | 
5 files changed, 36 insertions, 16 deletions
diff --git a/internal/federation/dereferencing/account.go b/internal/federation/dereferencing/account.go index d51d3078e..86ea9b7fd 100644 --- a/internal/federation/dereferencing/account.go +++ b/internal/federation/dereferencing/account.go @@ -37,6 +37,7 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/log"  	"github.com/superseriousbusiness/gotosocial/internal/media"  	"github.com/superseriousbusiness/gotosocial/internal/transport" +	"github.com/superseriousbusiness/gotosocial/internal/util"  )  // accountUpToDate returns whether the given account model is both updateable (i.e. @@ -384,7 +385,7 @@ func (d *Dereferencer) enrichAccountSafely(  	// to safely defer in case of panic, while still  	// performing more granular unlocks when needed.  	unlock := d.state.FedLocks.Lock(uriStr) -	unlock = doOnce(unlock) +	unlock = util.DoOnce(unlock)  	defer unlock()  	// Perform status enrichment with passed vars. @@ -735,7 +736,7 @@ func (d *Dereferencer) fetchRemoteAccountAvatar(ctx context.Context, tsport tran  	// Acquire lock for derefs map.  	unlock := d.state.FedLocks.Lock(latestAcc.AvatarRemoteURL) -	unlock = doOnce(unlock) +	unlock = util.DoOnce(unlock)  	defer unlock()  	// Look for an existing dereference in progress. @@ -821,7 +822,7 @@ func (d *Dereferencer) fetchRemoteAccountHeader(ctx context.Context, tsport tran  	// Acquire lock for derefs map.  	unlock := d.state.FedLocks.Lock(latestAcc.HeaderRemoteURL) -	unlock = doOnce(unlock) +	unlock = util.DoOnce(unlock)  	defer unlock()  	// Look for an existing dereference in progress. diff --git a/internal/federation/dereferencing/emoji.go b/internal/federation/dereferencing/emoji.go index 1bf19d2fd..009191780 100644 --- a/internal/federation/dereferencing/emoji.go +++ b/internal/federation/dereferencing/emoji.go @@ -28,6 +28,7 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/id"  	"github.com/superseriousbusiness/gotosocial/internal/log"  	"github.com/superseriousbusiness/gotosocial/internal/media" +	"github.com/superseriousbusiness/gotosocial/internal/util"  )  func (d *Dereferencer) GetRemoteEmoji(ctx context.Context, requestingUsername string, remoteURL string, shortcode string, domain string, id string, emojiURI string, ai *media.AdditionalEmojiInfo, refresh bool) (*media.ProcessingEmoji, error) { @@ -44,7 +45,7 @@ func (d *Dereferencer) GetRemoteEmoji(ctx context.Context, requestingUsername st  	// Acquire lock for derefs map.  	unlock := d.state.FedLocks.Lock(remoteURL) -	unlock = doOnce(unlock) +	unlock = util.DoOnce(unlock)  	defer unlock()  	// first check if we're already processing this emoji diff --git a/internal/federation/dereferencing/status.go b/internal/federation/dereferencing/status.go index 56032f351..71cc5c530 100644 --- a/internal/federation/dereferencing/status.go +++ b/internal/federation/dereferencing/status.go @@ -295,7 +295,7 @@ func (d *Dereferencer) enrichStatusSafely(  	// to safely defer in case of panic, while still  	// performing more granular unlocks when needed.  	unlock := d.state.FedLocks.Lock(uriStr) -	unlock = doOnce(unlock) +	unlock = util.DoOnce(unlock)  	defer unlock()  	// Perform status enrichment with passed vars. diff --git a/internal/federation/dereferencing/util.go b/internal/federation/dereferencing/util.go index c37f2d82d..38622f6c1 100644 --- a/internal/federation/dereferencing/util.go +++ b/internal/federation/dereferencing/util.go @@ -23,17 +23,6 @@ import (  	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"  ) -// doOnce wraps a function to only perform it once. -func doOnce(fn func()) func() { -	var once int32 -	return func() { -		if once == 0 { -			fn() -			once = 1 -		} -	} -} -  // pollChanged returns whether a poll has changed in way that  // indicates that this should be an entirely new poll. i.e. if  // the available options have changed, or the expiry has increased. diff --git a/internal/util/sync.go b/internal/util/sync.go new file mode 100644 index 000000000..ea232fd56 --- /dev/null +++ b/internal/util/sync.go @@ -0,0 +1,29 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program.  If not, see <http://www.gnu.org/licenses/>. + +package util + +// DoOnce wraps a function to only perform it once. +func DoOnce(fn func()) func() { +	var once int32 +	return func() { +		if once == 0 { +			fn() +			once = 1 +		} +	} +}  | 
