login changes when looking for available display
This commit is contained in:
parent
eeac7c938a
commit
c85e32446c
@ -180,6 +180,53 @@ session_start_sessvc(int xpid, int wmpid, long data)
|
|||||||
g_exit(0);
|
g_exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/* called with the main thread
|
||||||
|
returns boolean */
|
||||||
|
static int APP_CC
|
||||||
|
session_is_display_in_chain(int display)
|
||||||
|
{
|
||||||
|
struct session_chain* chain;
|
||||||
|
struct session_item* item;
|
||||||
|
|
||||||
|
chain = g_sessions;
|
||||||
|
while (chain != 0)
|
||||||
|
{
|
||||||
|
item = chain->item;
|
||||||
|
if (item->display == display)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
chain = chain->next;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/* called with the main thread */
|
||||||
|
static int APP_CC
|
||||||
|
session_get_aval_display_from_chain(void)
|
||||||
|
{
|
||||||
|
int display;
|
||||||
|
|
||||||
|
display = 10;
|
||||||
|
lock_chain_acquire();
|
||||||
|
while ((display - 10) <= g_cfg->sess.max_sessions)
|
||||||
|
{
|
||||||
|
if (!session_is_display_in_chain(display))
|
||||||
|
{
|
||||||
|
if (!x_server_running(display))
|
||||||
|
{
|
||||||
|
lock_chain_release();
|
||||||
|
return display;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
display++;
|
||||||
|
}
|
||||||
|
lock_chain_release();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* called with the main thread */
|
/* called with the main thread */
|
||||||
static int APP_CC
|
static int APP_CC
|
||||||
@ -225,21 +272,13 @@ session_start_fork(int width, int height, int bpp, char* username,
|
|||||||
"item - user %s", username);
|
"item - user %s", username);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
display = session_get_aval_display_from_chain();
|
||||||
display = 10;
|
if (display == 0)
|
||||||
|
|
||||||
/*while (x_server_running(display) && display < 50)*/
|
|
||||||
/* we search for a free display up to max_sessions */
|
|
||||||
/* we should need no more displays than this */
|
|
||||||
|
|
||||||
while (x_server_running(display))
|
|
||||||
{
|
|
||||||
display++;
|
|
||||||
if (((display - 10) > g_cfg->sess.max_sessions) || (display >= 50))
|
|
||||||
{
|
{
|
||||||
|
g_free(temp->item);
|
||||||
|
g_free(temp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
wmpid = 0;
|
wmpid = 0;
|
||||||
pid = g_fork();
|
pid = g_fork();
|
||||||
if (pid == -1)
|
if (pid == -1)
|
||||||
@ -479,10 +518,6 @@ session_start(int width, int height, int bpp, char* username, char* password,
|
|||||||
display = g_sync_result;
|
display = g_sync_result;
|
||||||
/* unlock mutex */
|
/* unlock mutex */
|
||||||
lock_sync_release();
|
lock_sync_release();
|
||||||
if (display != 0)
|
|
||||||
{
|
|
||||||
g_sleep(5000);
|
|
||||||
}
|
|
||||||
return display;
|
return display;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user