当前位置: 首页>>代码示例>>C++>>正文


C++ LockList函数代码示例

本文整理汇总了C++中LockList函数的典型用法代码示例。如果您正苦于以下问题:C++ LockList函数的具体用法?C++ LockList怎么用?C++ LockList使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了LockList函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: ReleaseAllLink

// Release all links
void ReleaseAllLink(HUB *h)
{
	LINK **kk;
	UINT num, i;
	// Validate arguments
	if (h == NULL)
	{
		return;
	}

	LockList(h->LinkList);
	{
		num = LIST_NUM(h->LinkList);
		kk = ToArray(h->LinkList);
		DeleteAll(h->LinkList);
	}
	UnlockList(h->LinkList);

	for (i = 0;i < num;i++)
	{
		LINK *k = kk[i];

		ReleaseLink(k);
	}

	Free(kk);
}
开发者ID:alex-docker,项目名称:CE-dockerfiles,代码行数:28,代码来源:Link.c

示例2: Tick64ToTime64

// Convert the Tick value to time
UINT64 Tick64ToTime64(UINT64 tick)
{
	UINT64 ret = 0;
	if (tick == 0)
	{
		return 0;
	}
	LockList(tk64->AdjustTime);
	{
		UINT i;
		for (i = 0;i < LIST_NUM(tk64->AdjustTime);i++)
		{
			ADJUST_TIME *t = LIST_DATA(tk64->AdjustTime, i);
			if (t->Tick <= tick)
			{
				ret = t->Time + (tick - t->Tick);
			}
		}
	}
	UnlockList(tk64->AdjustTime);
	if (ret == 0)
	{
		ret++;
	}
	return ret;
}
开发者ID:13eatrice,项目名称:SoftEtherVPN,代码行数:27,代码来源:Tick64.c

示例3: EtEnumDevice

// Device enumeration
UINT EtEnumDevice(EL *e, RPC_ENUM_DEVICE *t)
{
	bool is_beta_expired = ElIsBetaExpired();

	if (is_beta_expired)
	{
		// The beta version has expired
		return ERR_BETA_EXPIRES;
	}

	FreeRpcEnumDevice(t);
	Zero(t, sizeof(RPC_ENUM_DEVICE));

	LockList(e->DeviceList);
	{
		UINT i;

		t->NumItem = LIST_NUM(e->DeviceList);
		t->Items = ZeroMalloc(sizeof(RPC_ENUM_DEVICE_ITEM) * t->NumItem);

		for (i = 0;i < t->NumItem;i++)
		{
			RPC_ENUM_DEVICE_ITEM *d = &t->Items[i];
			EL_DEVICE *eld = LIST_DATA(e->DeviceList, i);

			StrCpy(d->DeviceName, sizeof(d->DeviceName), eld->DeviceName);
			d->Active = eld->Active && ((ELOG_IS_BETA || e->LicenseStatus->Valid) ? true : false);
		}
	}
	UnlockList(e->DeviceList);

	return ERR_NO_ERROR;
}
开发者ID:m-a-n-a-v,项目名称:SoftEtherVPN_Stable,代码行数:34,代码来源:EtherLog.c

示例4: LockList

// Add a Layer-3 switch
L3SW *L3AddSw(CEDAR *c, char *name)
{
	L3SW *s = NULL;
	// Validate arguments
	if (c == NULL || name == NULL)
	{
		return NULL;
	}

	LockList(c->L3SwList);
	{
		s = L3GetSw(c, name);

		if (s == NULL)
		{
			s = NewL3Sw(c, name);

			Insert(c->L3SwList, s);

			AddRef(s->ref);
		}
		else
		{
			ReleaseL3Sw(s);
			s = NULL;
		}
	}
	UnlockList(c->L3SwList);

	return s;
}
开发者ID:BIGbozi,项目名称:SoftEtherVPN,代码行数:32,代码来源:Layer3.c

示例5: Zero

// Get the L3 switch
L3SW *L3GetSw(CEDAR *c, char *name)
{
	L3SW t, *s;
	// Validate arguments
	if (c == NULL || name == NULL)
	{
		return NULL;
	}

	Zero(&t, sizeof(t));
	StrCpy(t.Name, sizeof(t.Name), name);

	LockList(c->L3SwList);
	{
		s = Search(c->L3SwList, &t);
	}
	UnlockList(c->L3SwList);

	if (s != NULL)
	{
		AddRef(s->ref);
	}

	return s;
}
开发者ID:BIGbozi,项目名称:SoftEtherVPN,代码行数:26,代码来源:Layer3.c

示例6: DeleteCa

// Delete trusted CA from Cedar
bool DeleteCa(CEDAR *cedar, UINT ptr)
{
	bool b = false;
	// Validate arguments
	if (cedar == NULL || ptr == 0)
	{
		return false;
	}

	LockList(cedar->CaList);
	{
		UINT i;

		for (i = 0;i < LIST_NUM(cedar->CaList);i++)
		{
			X *x = LIST_DATA(cedar->CaList, i);

			if (POINTER_TO_KEY(x) == ptr)
			{
				Delete(cedar->CaList, x);
				FreeX(x);

				b = true;

				break;
			}
		}
	}
	UnlockList(cedar->CaList);

	return b;
}
开发者ID:benapetr,项目名称:SoftEtherVPN,代码行数:33,代码来源:Cedar.c

示例7: AddConnection

// Add connection to Cedar
void AddConnection(CEDAR *cedar, CONNECTION *c)
{
	char tmp[MAX_SIZE];
	UINT i;
	// Validate arguments
	if (cedar == NULL || c == NULL)
	{
		return;
	}

	// Determine the name of the connection
	i = Inc(cedar->ConnectionIncrement);
	Format(tmp, sizeof(tmp), "CID-%u", i);


	Lock(c->lock);
	{
		Free(c->Name);
		c->Name = CopyStr(tmp);
	}
	Unlock(c->lock);

	LockList(cedar->ConnectionList);
	{
		Add(cedar->ConnectionList, c);
		AddRef(c->ref);
		Debug("Connection %s Inserted to Cedar.\n", c->Name);
	}
	UnlockList(cedar->ConnectionList);
}
开发者ID:benapetr,项目名称:SoftEtherVPN,代码行数:31,代码来源:Cedar.c

示例8: SoraUReleaseBuffer

VOID SoraUReleaseBuffer(PVOID Buff) {

	RELEASE_KERNEL_BUFFER_IN release_kb_in = { 0 };
	DWORD length;
	release_kb_in.Buff = Buff;

	OVERLAPPED overlap = { 0 };
	DeviceIoControl(SoraDevice, 
					UEXT_CMD(RELEASE_KERNEL_BUFFER), 
					&release_kb_in,
					sizeof(RELEASE_KERNEL_BUFFER_IN),
					NULL,
					0,
					&length,
					&overlap);

	LockList(&LockLong);
	LIST_ENTRY* entry;
	entry = AllocBufferListHead.Flink;
	while(entry != &AllocBufferListHead) {
		struct KernelBufferEntry* be;
		be = (struct KernelBufferEntry*)entry;
		if (be->AllocKBOut.Buff != Buff)
			entry = entry->Flink;
		else {
			RemoveEntryList(entry);
			delete be;
			break;
		}
	}
	UnlockList(&LockLong);
}
开发者ID:PaulJing,项目名称:Sora,代码行数:32,代码来源:_user_mode_ext.c

示例9: AcLock

// Lock the account database for the hub
void AcLock(HUB *h)
{
	// Validate arguments
	if (h == NULL)
	{
		return;
	}
	if (NO_ACCOUNT_DB(h))
	{
		return;
	}

	// Lock group list and user list
	LockList(h->HubDb->GroupList);
	LockList(h->HubDb->UserList);
}
开发者ID:AlexeyBychkov,项目名称:SoftEtherVPN,代码行数:17,代码来源:Account.c

示例10: SoraURadioTransferEx

HRESULT 
SoraURadioTransferEx(
    IN ULONG RadioNo,
    IN PVOID SampleBuffer,
    IN ULONG SampleSize,
    OUT PULONG TxID) {

	BOOL isContinuous;
	isContinuous = FALSE;
	
	LockList(&LockLong);
	
	LIST_ENTRY* entry;
	entry = AllocBufferListHead.Flink;
	while(entry != &AllocBufferListHead) {
		struct KernelBufferEntry* be;
		be = (struct KernelBufferEntry*)entry;
		if (((ULONG)SampleBuffer >= (ULONG)be->AllocKBOut.Buff) &&
			((ULONG)SampleBuffer + SampleSize <= (ULONG)be->AllocKBOut.Buff + be->Size)) {
			isContinuous = be->AllocKBOut.is_Continuous;
			break;
		}
		entry = entry->Flink;
	}
	UnlockList(&LockLong);

	if (isContinuous)
		return SoraURadioTransferContinuous(SampleBuffer,
			SampleSize,
			TxID);
	else
		return SoraURadioTransferDiscontinuous(SampleBuffer,	//  we make OS to prepare a physical continuous memory for us, the overhead is memory copy
			SampleSize,											//  it is still ok to force invoke SoraURadioTransferContinuous even if they are not physically continuous
			TxID);
}
开发者ID:PaulJing,项目名称:Sora,代码行数:35,代码来源:_user_mode_ext.c

示例11: SoraUForceAllocContinuousBufferEx

KernelBufferEntry* SoraUForceAllocContinuousBufferEx(ULONG Size) {

	ALLOC_KERNEL_BUFFER_IN alloc_kb_in;
	ALLOC_KERNEL_BUFFER_OUT alloc_kb_out = { 0 };
	DWORD length;
	alloc_kb_in.Size = Size;
	alloc_kb_in.force_Continuous = 1;

	OVERLAPPED overlap = { 0 };
	if (!DeviceIoControl(SoraDevice, 
						UEXT_CMD(ALLOC_KERNEL_BUFFER), 
						&alloc_kb_in,
						sizeof(ALLOC_KERNEL_BUFFER_IN),
						&alloc_kb_out,
						sizeof(ALLOC_KERNEL_BUFFER_OUT),
						&length,
						&overlap))
		return NULL;

	if (alloc_kb_out.Buff) {
		struct KernelBufferEntry* be;
		be = new struct KernelBufferEntry;
		be->AllocKBOut.Buff = alloc_kb_out.Buff;
		be->AllocKBOut.HiPhyBuff = alloc_kb_out.HiPhyBuff;
		be->AllocKBOut.LoPhyBuff = alloc_kb_out.LoPhyBuff;
		be->AllocKBOut.is_Continuous = alloc_kb_out.is_Continuous;
		be->Size = Size;		
		LockList(&LockLong);
		InsertHeadList(&AllocBufferListHead,
			be);
		UnlockList(&LockLong);
		return be;
	}
	return NULL;
}
开发者ID:PaulJing,项目名称:Sora,代码行数:35,代码来源:_user_mode_ext.c

示例12: DelUDPEntry

// Delete the UDP session from the UDP entry
void DelUDPEntry(CEDAR *cedar, SESSION *session)
{
	UINT num, i;
	// Validate arguments
	if (cedar == NULL || session == NULL)
	{
		return;
	}

	LockList(cedar->UDPEntryList);
	{
		num = LIST_NUM(cedar->UDPEntryList);
		for (i = 0;i < num;i++)
		{
			UDP_ENTRY *e = LIST_DATA(cedar->UDPEntryList, i);
			if (e->Session == session)
			{
				ReleaseSession(e->Session);
				Delete(cedar->UDPEntryList, e);
				Free(e);
				UnlockList(cedar->UDPEntryList);
				Debug("UDP_Entry Deleted.\n");
				return;
			}
		}
	}
	UnlockList(cedar->UDPEntryList);
}
开发者ID:1nv4d3r5,项目名称:SoftEtherVPN,代码行数:29,代码来源:Listener.c

示例13: LockList

// Get the session from the session key
SESSION *GetSessionFromUDPEntry(CEDAR *cedar, UINT key32)
{
	UDP_ENTRY *e, t;
	SESSION *s;
	// Validate arguments
	if (cedar == NULL)
	{
		return NULL;
	}

	t.SessionKey32 = key32;

	LockList(cedar->UDPEntryList);
	{
		e = Search(cedar->UDPEntryList, &t);
		if (e == NULL)
		{
			UnlockList(cedar->UDPEntryList);
			return NULL;
		}
		s = e->Session;
		AddRef(s->ref);
	}
	UnlockList(cedar->UDPEntryList);

	return s;
}
开发者ID:1nv4d3r5,项目名称:SoftEtherVPN,代码行数:28,代码来源:Listener.c

示例14: StopAllLink

// Stop all links
void StopAllLink(HUB *h)
{
	LINK **link_list;
	UINT num_link;
	UINT i;
	// Validate arguments
	if (h == NULL)
	{
		return;
	}

	LockList(h->LinkList);
	{
		link_list = ToArray(h->LinkList);
		num_link = LIST_NUM(h->LinkList);
		for (i = 0;i < num_link;i++)
		{
			AddRef(link_list[i]->ref);
		}
	}
	UnlockList(h->LinkList);

	for (i = 0;i < num_link;i++)
	{
		StopLink(link_list[i]);
		ReleaseLink(link_list[i]);
	}

	Free(link_list);
}
开发者ID:alex-docker,项目名称:CE-dockerfiles,代码行数:31,代码来源:Link.c

示例15: IsInNoSsl

// Check whether the specified IP address is in Non-SSL connection list
bool IsInNoSsl(CEDAR *c, IP *ip)
{
	bool ret = false;
	// Validate arguments
	if (c == NULL || ip == NULL)
	{
		return false;
	}

	LockList(c->NonSslList);
	{
		NON_SSL *n = SearchNoSslList(c, ip);

		if (n != NULL)
		{
			if (n->EntryExpires > Tick64() && n->Count > NON_SSL_MIN_COUNT)
			{
				n->EntryExpires = Tick64() + (UINT64)NON_SSL_ENTRY_EXPIRES;
				ret = true;
			}
		}
	}
	UnlockList(c->NonSslList);

	return ret;
}
开发者ID:benapetr,项目名称:SoftEtherVPN,代码行数:27,代码来源:Cedar.c


注:本文中的LockList函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。